在Netty中发送HTTP Post请求

时间:2013-11-02 01:32:08

标签: java json http post netty

我正试图围绕如何为Web服务器构建HTTP Post请求。

我找到了这段代码

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

根据我的推断,似乎此请求将发送一个POST请求,其中包含两个值a和c,它们分别等于b和d。

我希望能够做的是提交JSON请求。例如,如果我的后期数据需要

{
    "test": "value",
    "key": "value",
}

我会用这个字符串本身替换a = b& c = d吗?此外,我必须将内容类型设置为application / json。

如果有人能帮助我或指出我正确的方向,我会非常感激。

1 个答案:

答案 0 :(得分:0)

我通过Netty 4.x向localhost/target发送JSON请求的示例:

String JSON_DATA = "{    \"test\": \"value\",    \"key\": \"value\"}";
FullHttpRequest request = new DefaultFullHttpRequest(HTTP_1_1, POST, "/target",
        wrappedBuffer(JSON_DATA.getBytes(CharsetUtil.UTF_8)));
request.headers().add(HttpHeaderNames.HOST, "127.0.0.1");
request.headers().add(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.APPLICATION_JSON);
request.headers().add(HttpHeaderNames.ACCEPT_ENCODING, HttpHeaderValues.GZIP);
request.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE);

outboundChannel.writeAndFlush(request);