Enviar parámetros de publicación con Netty y ¿por qué DeFaUsTHTTPDATAFATORY no está en las versiones?

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

  •  27-10-2019
  •  | 
  •  

Pregunta

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);

No produce una solicitud válida. ¿Cuál es la forma correcta de enviar una solicitud de publicación, preferiblemente construyendo los datos de parámetros manualmente en lugar de DataFactory? Además, ¿por qué no se incluye httpdatafactory en ninguno de los lanzamientos?

¿Fue útil?

Solución

Escribiste todo correcto, solo agrega httpReq.setHeader(HttpHeaders.Names.CONTENT_TYPE,"application/x-www-form-urlencoded");Y tu ejemplo funcionará. Para un código más complejo, debe agregar la codificación de URL.

Otros consejos

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top