一、HTTP请求

Http的几种请求方式对应程序包中的HttpGet, HttpHead, HttpPost, HttpPut, HttpDelete, HttpTrace, and HttpOptions,这些类均实现了HttpUriRequest接口,所以可以作为execute的执行参数使用。

根据HTTP的请格式,我们可以知道有两种方式可以为request提供参数。

第一种方式:request-line

第二种方式:request-body

因为工作中使用HttpPost请求用到了这两种请求方式,所以下面就只列出HttpPost的请求,其他请求方式的等下次用到在补上。

二、HttpPost

1、request-line方式

  URI uri = null;List<NameValuePair> qparams = new ArrayList<NameValuePair>();qparams.add(new BasicNameValuePair("region", String.valueOf(departmentId)));//需要对应传参的name和valueqparams.add(new BasicNameValuePair("platNum", carNum));//需要对应传参的name和valuetry {uri = URIUtils.createURI("http", "192.168.1.xx:23002", -1, "/zyc/get/latestdd",URLEncodedUtils.format(qparams, "UTF-8"), null);HttpPost httpPost = new HttpPost(uri);System.out.println(httpPost.getURI());} catch (URISyntaxException e) {e.printStackTrace();} catch (JsonProcessingException e) {e.printStackTrace();}

打印结果如下:  http://192.168.1.75:23002/zyc/get/latest?region=320211&platNum

2、request-body

 PageHelper pageHelper =new PageHelper(pageIndex,pageSize,null);ObjectMapper MAPPER = new ObjectMapper();stringPage = MAPPER.writeValueAsString(pageHelper);//对象转StringList<NameValuePair> list = new LinkedList<>();list.add( new BasicNameValuePair("pageHelper",stringPage ));//pageHelper放在body中传过去HttpPost httpPost = new HttpPost(uri);// 使用URL实体转换工具UrlEncodedFormEntity entityParam = new UrlEncodedFormEntity(list, "UTF-8");         //使用 UrlEncodedFormEntity 来设置 body,消息体内容httpPost.setEntity(entityParam);

3、HttpPost两种方式结合在一起请求

    /*** 发送 post请求*/public String postParams(PageHelper pageHelper, Long region, String platNum) {// 获取连接客户端工具CloseableHttpClient httpClient = HttpClients.createDefault();String entityStr = null;CloseableHttpResponse response = null;ObjectMapper MAPPER = new ObjectMapper();try {String stringPage = MAPPER.writeValueAsString(pageHelper);List<NameValuePair> qparams = new ArrayList<NameValuePair>();qparams.add(new BasicNameValuePair("region", String.valueOf(region)));qparams.add(new BasicNameValuePair("platNum", platNum));URI uri = null;try {uri = URIUtils.createURI("http", "192.168.X.X:23002", -1, "/zyc/get/latestdd",URLEncodedUtils.format(qparams, "UTF-8"), null);} catch (URISyntaxException e) {e.printStackTrace();}HttpPost httpPost = new HttpPost(uri);System.out.println(httpPost.getURI());     // 创建请求参数HttpUriRequestList<NameValuePair> list = new LinkedList<>();list.add( new BasicNameValuePair("pageHelper",stringPage ));//放在body中/*JSONObject postData = new JSONObject();postData.put("pageHelper", stringPage);httpPost.setEntity(new StringEntity(postData.toString(), HTTP.UTF_8));*/// 使用URL实体转换工具UrlEncodedFormEntity entityParam = new UrlEncodedFormEntity(list, "UTF-8");// UrlEncodedFormEntity  request-bodyhttpPost.setEntity(entityParam);System.out.println("executing request " + httpPost.getURI());// 浏览器表示httpPost.addHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)");// 传输的类型httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");// 执行请求response = httpClient.execute(httpPost);// 获得响应的实体对象HttpEntity entity = response.getEntity();// 使用Apache提供的工具类进行转换成字符串entityStr = EntityUtils.toString(entity, "UTF-8");} catch (ClientProtocolException e) {System.err.println("Http协议出现问题");e.printStackTrace();} catch (ParseException e) {System.err.println("解析错误");e.printStackTrace();} catch (IOException e) {System.err.println("IO异常");e.printStackTrace();} finally {// 释放连接if (null != response) {try {response.close();httpClient.close();} catch (IOException e) {System.err.println("释放连接出错");e.printStackTrace();}}}// 打印响应内容System.out.println(entityStr);return  entityStr;}

注:说一下上面用到的BasicNameValuePair方法

三、BasicNameValuePair方法

new BasicNameValuePair(String1,String2)

BasicNameValuePair方法 进行参数传递时,只能使用String这种类型进行传递,事实上表单提交的get和post只能传递String类型,所以如何传递非String类型的参数,比如布尔类型、整型或者实体类。

其实第一个想到的就是将这些符合要求的类型转换成String类型就可以了,但是为什么可以直接转呢?

因为,httpPost.setEntity(new UrlEncodedFormEntity(params));这段神奇的代码

这里放到http entity里面的类型都是字节类型,HTTP协议与FTP,SMTP类似都是通过plain-text ASCII来进行CS数据通信的(不像TCP使用二进制,有历史原因,也更加节约带宽和方便调试),实际上并不存在什么String,Boolean,Integer数据类型,都是通过将byte进行ASCII编码来实现的,服务器端反序列化成String类型后,通过springMVC的框架进行解析,注意这里也需要区分提交方式,框架可能会选取适当的httpMessageConverter进行解析(这个是服务器关注的事情了)

HttpPost 携带参数的请求方式相关推荐

  1. uni-app 发送form-data参数的请求方式传值给后台

    传值给后台 基本上是form还有json格式把值传给后台. 首先是json格式的 header: {'Content-Type': 'application/json',}, form格式 heade ...

  2. java rest风格传参_SpringMVC的REST风格的四种请求方式总结

    一. 在HTTP 协议里面,四个表示操作方式的动词:GET.POST.PUT.DELETE. 它们分别对应四种基本操作: 1.GET ====== 获 取资源 2.POST ======新建资源 3. ...

  3. java的rest教程_[Java教程]SpringMVC的REST风格的四种请求方式

    [Java教程]SpringMVC的REST风格的四种请求方式 0 2017-08-28 22:00:25 一. 在HTTP 协议里面,四个表示操作方式的动词:GET.POST.PUT.DELETE. ...

  4. 数据请求方式Fetch

    一.前言 在前后端分离项目中,前端请求后端接口得到后端数据,完成页面内容的渲染或功能状态的判断,已经成为常规操作.那么,关于前端如何请求后端接口获取并解析数据,主要有哪些方式呢: 1. 刷新页面:最直 ...

  5. http消息当中,post和get两种请求方式的区别

    上周尼玛哥一直在看有关微信小程序,订阅号,服务号,等微信的应用,没来的及继续学习,今个学习到javaweb 的servlet ,觉得有个地方,可以大家稍微注意一下,就是消息请求当中,GET 与 POS ...

  6. java redirect 跨域_如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式...

    如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式 需求,项目A在服务器A上,需要重定向到服务器B上项目B,并且需要携带参数,参数对用户不可见,所以不可以将参数拼接在重定向ur ...

  7. get 和 post 请求方式 及其参数解析

    一.Get与Post区别   Get和Post都是Http协议的组件,所以底层都是使用tcp链接.Get的请求方式是将http的header和data一并发往服务端,也就是一条tcp数据包发送,这就会 ...

  8. SpringMVC之请求参数的获取方式

    转载出处:https://www.toutiao.com/i6510822190219264516/ SpringMVC之请求参数的获取方式 常见的一个web服务,如何获取请求参数? 一般最常见的请求 ...

  9. 爬虫之requests模块在headers参数中携带cookie发送请求

    爬虫之requests模块在headers参数中携带cookie发送请求 网站经常利用请求头中的Cookie字段来做用户访问状态的保持,那么我们可以在headers参数中添加Cookie,模拟普通用户 ...

最新文章

  1. MOS2010开发基础和集几种开发模型
  2. Py:利用pyautogui实现自动将pdf文件(需手动设定pdf总页数)自动翻页并截取另存为图片形式,或自动隔0.1秒自动截笔记本全屏保存到指定文件夹
  3. SharePoint技术峰会2009视频(6)
  4. SimpleXMLRPC_python xmlrpclib SimpleXMLRPCServer 模块
  5. 盘点云计算领域不可不读的9本书
  6. springcloud 使用git作为配置中心
  7. bzoj5118: Fib数列2(费马小定理+矩阵快速幂)
  8. SQLite数据库的使用——利用命令行或Navicat Premium创建数据库
  9. “Matter时代”行业再显梯队化,多强竞逐第一序列
  10. qt生成程序以管理员身份运行和取消以管理员身份运行方式
  11. html图片水波浪,css 实现水波纹,波浪动画效果
  12. error:LNK2005 已经在*.obj文件中定义的解决办法
  13. LeetCode:剑指 Offer 58 - II. 左旋转字符串
  14. android 手机震动功能吗,Android编程实现手机震动功能的方法
  15. JAVA常用遍历替换数据
  16. 关于DeviceLock和QQ2005正式版
  17. 女生适合开发还是测试?该如何选择?
  18. 为什么浏览器扩展会如此危险?
  19. 用BeanShell实现公式管理-使用Java脚本构建强大、灵活的公式管理系统[转]
  20. 超级列表框排序mysql_易语言超级列表框点击表头进行排序的代码

热门文章

  1. linux系统把驱动编译成.ko模块 insmod动态加载
  2. 王传福称华为手机是比亚迪造的;贝索斯将于7月20日飞往太空;苹果泄露女生私密照赔偿数百万美元 | EA周报...
  3. VMware共享文件夹
  4. 未来集市八月哥:致所有未来集市观望者的一封信
  5. CSS学习之二实践盒子
  6. 【美国真人秀专帖】收视率驱动下的诡异景观--西方真人秀透火遍美国
  7. 操作系统fork()进程
  8. 短信接口安全防御策略
  9. 微信小程序《胡莱三国》----websocket分析
  10. 快手全民特效大赛与王者荣耀双IP联合,200+优质魔表作品助力项目实现超34亿曝光