使用HttpClient模拟POST请求

article/2025/10/2 10:27:31

       HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。当前官网最新版介绍页是:http://hc.apache.org/httpcomponents-client-4.5.x/index.html


       许多需要后台模拟请求的系统或者框架都用的是httpclient。所以作为一个java开发人员,有必要学一学。本文提供了一个简单的demo,供初学者参考。


       使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可:

    1. 创建CloseableHttpClient对象。
    2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
    3. 如果需要发送请求参数,可可调用setEntity(HttpEntity entity)方法来设置请求参数。setParams方法已过时(4.4.1版本)。
    4. 调用HttpGet、HttpPost对象的setHeader(String name, String value)方法设置header信息,或者调用setHeaders(Header[] headers)设置一组header信息。
    5. 调用CloseableHttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个CloseableHttpResponse。
    6. 调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容;调用CloseableHttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头。
    7. 释放连接。无论执行方法是否成功,都必须释放连接

       具体代码如下(HttpClient-4.4.1):

[java]  view plain  copy
  1. /**  
  2.  * 简单httpclient实例 
  3.  *  
  4.  * @author arron 
  5.  * @date 2015年11月11日 下午6:36:49  
  6.  * @version 1.0  
  7.  */  
  8. public class SimpleHttpClientDemo {  
  9.   
  10.     /** 
  11.      * 模拟请求 
  12.      *  
  13.      * @param url       资源地址 
  14.      * @param map   参数列表 
  15.      * @param encoding  编码 
  16.      * @return 
  17.      * @throws ParseException 
  18.      * @throws IOException 
  19.      */  
  20.     public static String send(String url, Map<String,String> map,String encoding) throws ParseException, IOException{  
  21.         String body = "";  
  22.   
  23.         //创建httpclient对象  
  24.         CloseableHttpClient client = HttpClients.createDefault();  
  25.         //创建post方式请求对象  
  26.         HttpPost httpPost = new HttpPost(url);  
  27.           
  28.         //装填参数  
  29.         List<NameValuePair> nvps = new ArrayList<NameValuePair>();  
  30.         if(map!=null){  
  31.             for (Entry<String, String> entry : map.entrySet()) {  
  32.                 nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));  
  33.             }  
  34.         }  
  35.         //设置参数到请求对象中  
  36.         httpPost.setEntity(new UrlEncodedFormEntity(nvps, encoding));  
  37.   
  38.         System.out.println("请求地址:"+url);  
  39.         System.out.println("请求参数:"+nvps.toString());  
  40.           
  41.         //设置header信息  
  42.         //指定报文头【Content-type】、【User-Agent】  
  43.         httpPost.setHeader("Content-type""application/x-www-form-urlencoded");  
  44.         httpPost.setHeader("User-Agent""Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");  
  45.           
  46.         //执行请求操作,并拿到结果(同步阻塞)  
  47.         CloseableHttpResponse response = client.execute(httpPost);  
  48.         //获取结果实体  
  49.         HttpEntity entity = response.getEntity();  
  50.         if (entity != null) {  
  51.             //按指定编码转换结果实体为String类型  
  52.             body = EntityUtils.toString(entity, encoding);  
  53.         }  
  54.         EntityUtils.consume(entity);  
  55.         //释放链接  
  56.         response.close();  
  57.         return body;  
  58.     }  
  59. }  

       在main方法中测试一下:

[java]  view plain  copy
  1. public static void main(String[] args) throws ParseException, IOException {  
  2.     String url="http://php.weather.sina.com.cn/iframe/index/w_cl.php";  
  3.     Map<String, String> map = new HashMap<String, String>();  
  4.     map.put("code""js");  
  5.     map.put("day""0");  
  6.     map.put("city""上海");  
  7.     map.put("dfc""1");  
  8.     map.put("charset""utf-8");  
  9.     String body = send(url, map,"utf-8");  
  10.     System.out.println("交易响应结果:");  
  11.     System.out.println(body);  
  12.   
  13.     System.out.println("-----------------------------------");  
  14.   
  15.     map.put("city""北京");  
  16.     body = send(url, map, "utf-8");  
  17.     System.out.println("交易响应结果:");  
  18.     System.out.println(body);  
  19. }  
       结果如下:
[html]  view plain  copy
  1. 请求地址:http://php.weather.sina.com.cn/iframe/index/w_cl.php  
  2. 请求参数:[dfc=1charset=utf-8, day=0code=jscity=上海]  
  3. 交易响应结果:  
  4. (function(){var w=[];w['上海']=[{s1:'小雨',s2:'小雨',f1:'xiaoyu',f2:'xiaoyu',t1:'21',t2:'16',p1:'≤3',p2:'≤3',d1:'南风',d2:'北风'}];var add={now:'2015-11-16 13:16:23',time:'1447650983',update:'北京时间11月16日08:10更新',error:'0',total:'1'};window.SWther={w:w,add:add};})();//0  
  5.   
  6. -----------------------------------  
  7. 请求地址:http://php.weather.sina.com.cn/iframe/index/w_cl.php  
  8. 请求参数:[dfc=1charset=utf-8, day=0code=jscity=北京]  
  9. 交易响应结果:  
  10. (function(){var w=[];w['北京']=[{s1:'多云',s2:'多云',f1:'duoyun',f2:'duoyun',t1:'9',t2:'1',p1:'≤3',p2:'≤3',d1:'无持续风向',d2:'无持续风向'}];var add={now:'2015-11-16 13:18:35',time:'1447651115',update:'北京时间11月16日08:10更新',error:'0',total:'1'};window.SWther={w:w,add:add};})();//0  

       现在我们测试一下https链接:https://www.qingyidai.com/investmanagement/invest.shtml

[java]  view plain  copy
  1. public static void main(String[] args) throws ParseException, IOException {  
  2.     String url = "https://www.qingyidai.com/investmanagement/invest.shtml";  
  3.     String body = send(url, null"utf-8");  
  4.     System.out.println("交易响应结果:");  
  5.     System.out.println(body);  
  6. }  
       结果发现,居然正常拿到结果了:


       原来如果网站的证书已经被ca机构认证通过了,那么用HttpClient来调用的话,会直接成功的。不用再单独配置htts链接了。不过如果是自签名的证书,还是需要配置https的


转自: http://blog.csdn.net/xiaoxian8023/article/details/49863967



http://chatgpt.dhexx.cn/article/DGFRJgNb.shtml

相关文章

fastmock模拟post、get请求

参考资料&#xff1a; fastmock 帮助文档 初学者可以根据这个文档了解如何创建项目 【前端必备基本技能】-fastMock平台使用_哔哩哔哩_bilibili 如果觉得文档不好理解的小伙伴可以看这个视频&#xff0c;本人觉得讲的很仔细。 Mock.js 实例练习&#xff1a; get请求 …

TCP模拟HTTP请求

HTTP的特性 HTTP是构建于TCP/IP协议之上&#xff0c;是应用层协议&#xff0c;默认端口号80 HTTP协议是无连接无状态的 HTTP报文 请求报文 HTTP协议是以ASCⅡ码传输&#xff0c;建立在TCP/IP协议之上的应用层规范。 HTTP请求报文由请求行&#xff08;request line&#xff09;、…

使用postman模拟post、get请求

postman通常作为一种接口测试工具&#xff0c;如&#xff1a;采用post、get等方式&#xff0c;模拟对接口进行访问&#xff0c;用于查看接口功能是否正常。 模拟POST请求 选择请求方式为POST 设置请求url地址 http://localhost:8081/webside/subSystemLogin.html 选择Header…

如何简单的模拟发送http post请求

有天在做项目演示的时候要用到post请求的模拟发送&#xff0c;为此总不至于写一个html页面&#xff0c;当时只记得百度了一下模拟发送http post请求&#xff0c;方法大概都是说用fiddler工具或者使用cmd内置telnet客户端模拟http请求。 这里抄送附上fiddler工具和telnet模拟po…

接口测试中模拟post四种请求数据

转自 作者&#xff1a;隋胖胖LoveFat 链接&#xff1a;https://www.jianshu.com/p/3b6d7aa2043a 来源&#xff1a;简书 一、背景介绍 在日常的接口测试工作中&#xff0c;模拟接口请求通常有两种方法&#xff0c;fiddler模拟和HttpClient模拟。 Fiddler是一个简单的http协议调…

谷歌学术访问

https://via.hypothes.is/ 不需要镜像&#xff0c;不需要任何操作&#xff0c;只需打开这个网站&#xff0c;输入你要访问的学术网站&#xff0c;秒开 第一步&#xff1a; 第二步:

谷歌学术(google scholar)个人主页的论文信息不准确怎么办?

题目&#xff1a;谷歌学术(google scholar)个人主页的论文信息不准确怎么办&#xff1f; 谷歌学术主页是很多人展示自己学术成果的一种方式&#xff0c;但很多时候&#xff0c;谷歌自动给你聚集到主页的论文信息是有误的&#xff0c;这时候怎么去编辑呢&#xff1f; 论文信息…

谷歌学术介绍

转载自&#xff1a;http://blog.renren.com/share/111541487/15517062888 “谷歌学术”是谷歌搜索引擎中的学术检索部分&#xff0c;相对于知网、维普、万方、Pubmed等专业的论文数据库来说功能单薄了些&#xff0c;但具有页面简约、搜索速度快、集国内外文献于一体、某些文章可…

Google 学术搜索(Google Scholar)使用技巧

本文简介Google 学术搜索&#xff08;Google Scholar&#xff09;使用技巧&#xff0c; 关于Web Of Science 上搜索文献&#xff0c;查看SCI分区及影响因子情况参见我的另一篇博客&#xff08;https://xiongyiming.blog.csdn.net/article/details/78474211&#xff09; Google…

【谷歌学术】使用指南

【谷歌学术】使用指南 谷歌可以清楚看到作者的影响力&#xff0c;尤其是在衡量一个学者有多厉害&#xff0c;论文质量有多高【往往是博士阶层往上】 谷歌学术网站&#xff1a; https://scholar.google.com.hk/?hlzh-CN 查人 查论文都很好用 同时你订阅这个作者 还会收到他…

如何在谷歌学术下载论文

如何在谷歌学术下载论文&#xff08;在Mac Pro上记录&#xff0c;但是windows应该同样适用&#xff09; 1 下载谷歌浏览器 下载谷歌浏览器 官网截图如下&#xff1a; 2 下载谷歌浏览器扩展程序 googlehelper下载 在下载的时候&#xff0c;要记住下载的位置&#xff0c;后面…

谷歌学术搜索

Google Scholar &#xff08;谷歌学术搜索&#xff0c;简称GS&#xff09;是一个可以免费搜索学术文章的网络搜索引擎索引了出版文章中文字的格式和科目&#xff0c;能够帮助用户查找包括期刊论文、学位论文、书籍、预印本、文摘和技术报告在内的学术文献&#xff0c;内容涵盖自…

谷歌学术Google Scholar超实用干货(拒绝翻墙/插件)

最近看了很多大佬博主发的谷歌学术使用总结,觉得特别有用,小P在这里简单的总结一下,给自己做个使用大纲,也分享给大家啦!(觉得有帮助别忘了点赞、收藏哦) 谷歌学术简单来说就是一个汇集大量外文文献的网站(类似于百度学术)。百度学术的特点是:精简、不全不新,谷歌学…

科研——谷歌学术使用方法

输入需要搜索的文章名 点击“引用”&#xff0c;即可以出此篇文章的引用格式。点击“被引用次数”&#xff0c;即可以看到引用此篇文章的其他文章。 勾选“在引用文章中搜索”&#xff0c;在上方的空白处&#xff0c;搜索这些引用文章中的具体文章。 点击一篇查看是否被真正引用…

谷歌学术——下载论文

一些同学在找论文的时候&#xff0c;在学校数据库找不到&#xff0c;因此可以使用谷歌学术来找。但是国内被墙了&#xff0c;无法访问&#xff0c;所以可以使用镜像服务器。 首先进入谷歌镜像&#xff1a; 镜像网站&#xff08;https://ac.scmor.com/&#xff09; 点击进入之后…

国内外常用学术网站(访问不了“谷歌学术”的,试一试有惊喜哦)

搞学术的可能对如何能够快速查找优质免费学术资源感到头大于是笔者寻找了许许多多方法&#xff0c;搜集了很多网站&#xff0c;期望谷歌访问不了是可以找到替代或者与谷歌学术相媲美的网站&#xff0c;现汇总如下分享给大家&#xff0c;希望对搞研究的有所帮助。 一、学术网站…

RPC框架介绍

什么是RPC框架&#xff1a; 远程过程调用RPC&#xff0c;就是客户端基于某种传输协议通过网络向服务提供端请求服务处理&#xff0c;然后获取返回数据(对于ONE WAY模式则不返还响应结果)&#xff1b;而这种调用对于客户端而言&#xff0c;和调用本地服务一样方便&#xff0c;开…

跨语言rpc框架Thrift

RPC 全称 Remote Procedure Call——远程过程调用。RPC技术简单说就是为了解决远程调用服务 的一种技术&#xff0c;使得调用者像调用本地服务一样方便透明 Thrift的定义 Thrift是一个轻量级、跨语言的RPC框架&#xff0c;主要用于各个服务之间的RPC通信&#xff0c;最初由Face…

RPC 框架性能大比拼

Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。 Motan 是新浪微博开源的一个Java 框架。它诞生的比较晚,起于2013年,2016年5月开源。Motan 在微博平台中已经广泛应用,每天为数…

分布式RPC框架性能大比拼

点击上方“后端技术精选”&#xff0c;选择“置顶公众号” 技术文章第一时间送达&#xff01; 来源&#xff1a;鸟窝 链接&#xff1a;http://985.so/aXe2 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4. 排序算法内容聚合 5. 多…