使用 HttpClient 写入正文请求

Posted

技术标签:

【中文标题】使用 HttpClient 写入正文请求【英文标题】:Write in body request with HttpClient 【发布时间】:2013-08-13 19:50:17 【问题描述】:

我想用 XML 内容类型编写请求的正文,但我不知道如何使用 HttpClient 对象 (http://hc.apache.org/httpclient-3.x/apidocs/index.html)

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpRequest = new HttpPost(this.url);
httpRequest.setHeader("Content-Type", "application/xml");

而且我不知道如何继续用我的 XML 编写正文...

【问题讨论】:

【参考方案1】:

扩展您的代码(假设您要发送的 XML 在 xmlString 中):

String xmlString = "</xml>";
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpRequest = new HttpPost(this.url);
httpRequest.setHeader("Content-Type", "application/xml");
StringEntity xmlEntity = new StringEntity(xmlString);
httpRequest.setEntity(xmlEntity );
HttpResponse httpresponse = httpclient.execute(httppost);

【讨论】:

【参考方案2】:

如果你的 xml 是由java.lang.String 编写的,你可以这样使用HttpClient

    public void post() throws Exception
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost("http://www.baidu.com");
        String xml = "<xml>xxxx</xml>";
        HttpEntity entity = new ByteArrayEntity(xml.getBytes("UTF-8"));
        post.setEntity(entity);
        HttpResponse response = client.execute(post);
        String result = EntityUtils.toString(response.getEntity());
    

注意例外情况。

顺便说一句,例子是httpclient 4.x版本写的

【讨论】:

我建议使用java.nio.charset.StandardCharsets,并将ByteArrayEntity这一行修改为:HttpEntity entity = new ByteArrayEntity(xml.getBytes(StandardCharsets.UTF_8)); new ByteArrayEntity(xml.getBytes("UTF-8"));代替new StringEntity(xml, ContentType.APPLICATION_XML); 使用新的 StringEntity 可能会导致在标头中声明的字符集不正确。小心使用。 应该使用HttpClientBuilder.create().build(),因为DefaultHttpClient已被弃用。

以上是关于使用 HttpClient 写入正文请求的主要内容,如果未能解决你的问题,请参考以下文章

如何接收httpclient发送的请求

HttpClient.SendAsync 不发送请求正文

如何使用 HttpClient 在 GET 请求正文中发送内容?

WebApi系列~HttpClient的性能隐患 - 转

如何使用标头、有效负载和正文制作 httpclient 获取请求?角度 API

httpclient 学习