NettyでPost Paramsを送信し、なぜDefulthttpdataFactoryがリリースではないのですか?

StackOverflow https://stackoverflow.com/questions/7324680

  •  27-10-2019
  •  | 
  •  

質問

HttpRequest httpReq=new DefaultHttpRequest(HttpVersion.HTTP_1_1,HttpMethod.POST,uri);
httpReq.setHeader(HttpHeaders.Names.HOST,host);
httpReq.setHeader(HttpHeaders.Names.CONNECTION,HttpHeaders.Values.KEEP_ALIVE);
httpReq.setHeader(HttpHeaders.Names.ACCEPT_ENCODING,HttpHeaders.Values.GZIP);
String params="a=b&c=d";
ChannelBuffer cb=ChannelBuffers.copiedBuffer(params,Charset.defaultCharset());
httpReq.setHeader(HttpHeaders.Names.CONTENT_LENGTH,cb.readableBytes());
httpReq.setContent(cb);

有効なリクエストが得られません。 DataFactoryとは対照的に、パラメーターデータを手動で構築することにより、ポストリクエストを送信する正しい方法は何ですか。また、なぜHTTPDATAFactoryがリリースのいずれにも含まれていないのですか?

役に立ちましたか?

解決

あなたはすべてを正しく書いた、ただ追加してください httpReq.setHeader(HttpHeaders.Names.CONTENT_TYPE,"application/x-www-form-urlencoded");そして、あなたの例は機能します。より複雑なコードの場合、URLエンコードを追加する必要があります。

他のヒント

DefaultFullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, uri.toASCIIString());
request.headers().set(HttpHeaders.Names.HOST, ip);
request.headers().set(HttpHeaders.Names.CONTENT_TYPE,"application/x-www-form-urlencoded");
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair(param.getKey(), param.getValue()));
HttpEntity httpEntity = new UrlEncodedFormEntity(nvps);
ByteBuf byteBuf = 
Unpooled.copiedBuffer(EntityUtils.toByteArray(httpEntity));
request.content().writeBytes(byteBuf);
request.headers().set(HttpHeaders.Names.CONTENT_LENGTH,request.content().readableBytes());
fu.channel().writeAndFlush(request)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top