怎么用httpclient发送post请求

 我来答
就烦条0o
2016-07-18 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46488
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
有时候我们在发送HTTP请求的时候会使用到POST方式,如果是传送普通的表单数据那将很方便,直接将参数到一个Key-value形式的Map
中即可。但是如果我们需要传送的参数是Json格式的,会稍微有点麻烦,我们可以使用HttpClient类库提供的功能来实现这个需求。假设我们需要发
送的数据是:

{
"blog": "http://www.iteblog.com",
"Author": "iteblog"
}

我们可以通过JSONObject够着Json:

JSONObject jsonObject = new JSONObject();

jsonObject.put("blog", "http://www.iteblog.com");
jsonObject.put("Author", "iteblog");

如果需要使用Post方式来发送这个数据,我们可以如下实现:

private HttpMethodBase createMethod(String url, int timeout) {
PostMethod method = null;
try {
method = new PostMethod(url);
JSONObject jsonObject = new JSONObject();

jsonObject.put("blog", "http://www.iteblog.com");
jsonObject.put("Author", "iteblog");

String transJson = jsonObject.toString();
RequestEntity se = new StringRequestEntity(transJson, "application/json", "UTF-8");
method.setRequestEntity(se);
//使用系统提供的默认的恢复策略
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
//设置超时的时间
method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, timeout);
} catch (IllegalArgumentException e) {
logger.error("非法的URL:{}", url);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

return method;
}

  我们通过StringRequestEntity来构造请求实体,在这里,StringRequestEntity将接收三个参数,如下:

public StringRequestEntity(String content, String contentType, String charset)
  throws UnsupportedEncodingException

  其中参数content就是我们需要传输的数据;contentType是传送数据的格式,因为我们的数据格式是json的,所以contentType必须填写application/json(更多的contentType可以参见《HTTP Content-Type常用一览表》);charset是字符集编码。

  然后我们再通过HttpClient对象的executeMethod方法来执行:

int statusCode = httpClient.executeMethod(getMethod);
//只要在获取源码中,服务器返回的不是200代码,则统一认为抓取源码失败,返回null。
if (statusCode != HttpStatus.SC_OK) {
logger.error("Method failed: " + getMethod.getStatusLine() + "\tstatusCode: " + statusCode);
return null;
}

pom.xml文件的关键内容

<dependencies>
<!--网络爬虫-->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.3.1</version>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>14.0.1</version>
</dependency>

<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>
</dependencies>
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式