HttpPost 携带参数的请求方式
一、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 携带参数的请求方式相关推荐
- uni-app 发送form-data参数的请求方式传值给后台
传值给后台 基本上是form还有json格式把值传给后台. 首先是json格式的 header: {'Content-Type': 'application/json',}, form格式 heade ...
- java rest风格传参_SpringMVC的REST风格的四种请求方式总结
一. 在HTTP 协议里面,四个表示操作方式的动词:GET.POST.PUT.DELETE. 它们分别对应四种基本操作: 1.GET ====== 获 取资源 2.POST ======新建资源 3. ...
- java的rest教程_[Java教程]SpringMVC的REST风格的四种请求方式
[Java教程]SpringMVC的REST风格的四种请求方式 0 2017-08-28 22:00:25 一. 在HTTP 协议里面,四个表示操作方式的动词:GET.POST.PUT.DELETE. ...
- 数据请求方式Fetch
一.前言 在前后端分离项目中,前端请求后端接口得到后端数据,完成页面内容的渲染或功能状态的判断,已经成为常规操作.那么,关于前端如何请求后端接口获取并解析数据,主要有哪些方式呢: 1. 刷新页面:最直 ...
- http消息当中,post和get两种请求方式的区别
上周尼玛哥一直在看有关微信小程序,订阅号,服务号,等微信的应用,没来的及继续学习,今个学习到javaweb 的servlet ,觉得有个地方,可以大家稍微注意一下,就是消息请求当中,GET 与 POS ...
- java redirect 跨域_如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式...
如何解决跨域重定向携带参数的问题?不使用将参数拼接在重定向url末尾的方式 需求,项目A在服务器A上,需要重定向到服务器B上项目B,并且需要携带参数,参数对用户不可见,所以不可以将参数拼接在重定向ur ...
- get 和 post 请求方式 及其参数解析
一.Get与Post区别 Get和Post都是Http协议的组件,所以底层都是使用tcp链接.Get的请求方式是将http的header和data一并发往服务端,也就是一条tcp数据包发送,这就会 ...
- SpringMVC之请求参数的获取方式
转载出处:https://www.toutiao.com/i6510822190219264516/ SpringMVC之请求参数的获取方式 常见的一个web服务,如何获取请求参数? 一般最常见的请求 ...
- 爬虫之requests模块在headers参数中携带cookie发送请求
爬虫之requests模块在headers参数中携带cookie发送请求 网站经常利用请求头中的Cookie字段来做用户访问状态的保持,那么我们可以在headers参数中添加Cookie,模拟普通用户 ...
最新文章
- MOS2010开发基础和集几种开发模型
- Py:利用pyautogui实现自动将pdf文件(需手动设定pdf总页数)自动翻页并截取另存为图片形式,或自动隔0.1秒自动截笔记本全屏保存到指定文件夹
- SharePoint技术峰会2009视频(6)
- SimpleXMLRPC_python xmlrpclib SimpleXMLRPCServer 模块
- 盘点云计算领域不可不读的9本书
- springcloud 使用git作为配置中心
- bzoj5118: Fib数列2(费马小定理+矩阵快速幂)
- SQLite数据库的使用——利用命令行或Navicat Premium创建数据库
- “Matter时代”行业再显梯队化,多强竞逐第一序列
- qt生成程序以管理员身份运行和取消以管理员身份运行方式
- html图片水波浪,css 实现水波纹,波浪动画效果
- error:LNK2005 已经在*.obj文件中定义的解决办法
- LeetCode:剑指 Offer 58 - II. 左旋转字符串
- android 手机震动功能吗,Android编程实现手机震动功能的方法
- JAVA常用遍历替换数据
- 关于DeviceLock和QQ2005正式版
- 女生适合开发还是测试?该如何选择?
- 为什么浏览器扩展会如此危险?
- 用BeanShell实现公式管理-使用Java脚本构建强大、灵活的公式管理系统[转]
- 超级列表框排序mysql_易语言超级列表框点击表头进行排序的代码
热门文章
- linux系统把驱动编译成.ko模块 insmod动态加载
- 王传福称华为手机是比亚迪造的;贝索斯将于7月20日飞往太空;苹果泄露女生私密照赔偿数百万美元 | EA周报...
- VMware共享文件夹
- 未来集市八月哥:致所有未来集市观望者的一封信
- CSS学习之二实践盒子
- 【美国真人秀专帖】收视率驱动下的诡异景观--西方真人秀透火遍美国
- 操作系统fork()进程
- 短信接口安全防御策略
- 微信小程序《胡莱三国》----websocket分析
- 快手全民特效大赛与王者荣耀双IP联合,200+优质魔表作品助力项目实现超34亿曝光