【问题标题】:Sending HTTP Post Request in Netty在 Netty 中发送 HTTP Post 请求
【发布时间】:2013-11-13 07:38:40
【问题描述】:

我正在努力思考如何为 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 替换为该字符串本身?另外,我必须将 content-type 设置为 application/json。

如果有人可以帮助我或指出正确的方向,我将不胜感激。

【问题讨论】:

标签: java json http post netty


【解决方案1】:

我通过 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);

【讨论】:

    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多