정말 중요한 문제에 봉착했습니다. HttpRequest
에서 POST
까지 Netty를 사용하는 서버에 약간의 JSON을 사용합니다. 채널이 연결되면Netty를 사용하는 서버에 POST JSON을 수행 할 수 없음
는 I 요청 같이 제조 :
가HttpRequest request = new DefaultHttpRequest(
HttpVersion.HTTP_1_1, HttpMethod.POST, postPath);
request.setHeader(HttpHeaders.Names.CONTENT_TYPE, "application/json");
String json = "{\"foo\":\"bar\"}";
ChannelBuffer buffer = ChannelBuffers.copiedBuffer(json, CharsetUtil.UTF_8);
request.setContent(buffer);
channel.write(request);
System.out.println("sending on channel: " + json);
마지막 줄 JSON 잘 형성되어 {"foo":"bar"}
를 출력한다.
그러나 Flask를 사용하여 파이썬에서 작성한 매우 간단한 에코 서버가 요청을 표시하지만 본문을 JSON으로 올바르게 구문 분석 할 수없는 것처럼 body
또는 json
필드가 없습니다. 단순히 같은 데이터를 전송하는 curl
을 사용하는 경우
, 다음 에코 서버가 제대로 JSON을 찾아 분석 않습니다
curl --header "Content-Type: application/json" -d '{"foo":"bar"}' -X POST http://localhost:5000/post_path
의 Netty에서 내 파이프 라인이 형성된다 :
return Channels.pipeline(
new HttpClientCodec(),
new MyUpstreamHandler(...));
경우 MyUpstreamHandler
은 SimpleChannelUpstreamHandler
으로 확장되며 채널이 연결된 후 HttpRequest
을 보내려고합니다.
다시 말하지만, 나는 완전히 손실되었습니다. 어떤 도움이라도 대단히 감사하겠습니다.
이것은 실제로 문제가되었습니다. 나는 원래 다음을 넣었습니다 :'request.setHeader (HttpHeaders.Names.CONTENT_LENGTH, String.valueOf (buffer.getByteArray(). length));' 버퍼의'byte []'는 풀에 저장되며, 버퍼가 복사 된'json'에서 파생되지 않습니다. 다시 되돌아 보면 '13'대신 '53'이 돌아 왔습니다. 이 시점에서 나는'setHeader'에 대한이 호출을 생략했습니다. Netty가'request.setContent'에 전달 된 매개 변수에 따라 간단히 추가 할 수 있기를 바라고 있습니다. Jestan이 지적했듯이, 나는'buffer.readableBytes()'를 사용해야합니다. – shadowmatter