2

我正在努力思考如何为 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);

根据我的推断,这个请求似乎将发送一个带有两个值 a 和 c 的 POST 请求,这两个值分别等于 b 和 d。

我想做的是提交一个 JSON 请求。例如,如果我的后期数据需要

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

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

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

4

1 回答 1

0

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

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);
于 2018-05-15T08:43:03.943 回答