问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

httpClient能不能在一次post请求中进行多次数据交换

发布网友 发布时间:2022-05-12 17:08

我来回答

1个回答

热心网友 时间:2022-04-26 18:17

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

{
"blog": "",
"Author": "iteblog"
}

我们可以通过JSONObject够着Json:

JSONObject jsonObject = new JSONObject();

jsonObject.put("blog", "");
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", "");
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>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
家政服务阿姨是做什么的? 中央空调水滴图标是什么模式? 和EXO有关(字)的头像3张, 真的没人要么 exo这几个字母头像组合的头像 有没有EX0成员穿有EXO字的衣服的图片,和我头像一样的,越多越好! 为什么工商办卡要证明 亲子阅读的优缺点是什么? 馒头冬天放在室外存放 宝宝2 岁半说话结巴,宝宝结巴怎么纠正? 宝宝讲话口齿不清怎么办 Downside Risk是什么意思啊啊? 为什么这个POST封包被分成两次发送了 福建省产品质量检验研究所CMA资质证书有否检验消毒抑菌产品能力相关资质附表 CTO(Chief Technology Officer)是什么意思啊?? 我这一个js文件用$.post向一个页面请求了两次,第一次可以,第二次就不行了是怎么回事 post get 哪一个需要发送两次请求 金融专业考注册会计师有用吗 Jquery post嵌套重复提交。 straight A student是什么意思啊?? 一次Post请求为什么为产生多次请求 用英语阐述CMA学习的认识 红嫂的介绍 iOS 编程连续发送两次 post 请求的办法 跨域的get和post的区别 heptathlon是什么意思? 推荐CMA的都有哪些人 post提交数据会请求两次 沂蒙沂生的原型是谁 cma考试科目难度,cma考试通过率怎样?cma考试时间及科目 红嫂这部电影讲述了一个什么样子的故事? 为什么angularjs在点击一次之后,会发送两次请求 http的post请求能进行多次数据交换吗? 发短信怎么知道对方已看 怎么揭膏药才不会疼呀? 我脖子上贴的膏药,怎样揭才不会疼 怎样揭下膏药不痛 光猫802.1怎么设置 电信光猫第4个网口怎么设置看机顶盒 北大资源首座怎么样?好不好?值不值得买? 南昌市红谷滩新区丰和北大道369号c2o7室电话c2o7室电话是什么号 海淀区成府路298号方正大厦4层有北大资源有贷款部吗? 我那么温柔那么爱你 你是我的唯一这是什么歌? 听说北大资源缤纷广场新年优惠延期了真的吗? 小河黄河路北大资源缤纷广场在贵阳哪个区,坐哪一路公交可到达 北大资源海港城交通方便吗?应该怎么过去? 电脑上上两个 电脑如何登陆两个 城野医生BB霜日期怎么看 把电视的户外天线连接在一块大铁皮上能增加信号吗? 电视室外天线高过楼顶的避雷针危险吗?