httpclient模拟post请求json封装表单数据

 1     public static String httpPostWithJSON(String url) throws Exception {
 2
 3         HttpPost httpPost = new HttpPost(url);
 4         CloseableHttpClient client = HttpClients.createDefault();
 5         String respContent = null;
 6
 7 //        json方式
 8         JSONObject jsonParam = new JSONObject();
 9         jsonParam.put("name", "admin");
10         jsonParam.put("pass", "123456");
11         StringEntity entity = new StringEntity(jsonParam.toString(),"utf-8");//解决中文乱码问题
12         entity.setContentEncoding("UTF-8");
13         entity.setContentType("application/json");
14         httpPost.setEntity(entity);
15         System.out.println();
16
17
18 //        表单方式
19 //        List<BasicNameValuePair> pairList = new ArrayList<BasicNameValuePair>();
20 //        pairList.add(new BasicNameValuePair("name", "admin"));
21 //        pairList.add(new BasicNameValuePair("pass", "123456"));
22 //        httpPost.setEntity(new UrlEncodedFormEntity(pairList, "utf-8"));
23
24
25         HttpResponse resp = client.execute(httpPost);
26         if(resp.getStatusLine().getStatusCode() == 200) {
27             HttpEntity he = resp.getEntity();
28             respContent = EntityUtils.toString(he,"UTF-8");
29         }
30         return respContent;
31     }
32
33
34     public static void main(String[] args) throws Exception {
35         String result = httpPostWithJSON("http://localhost:8080/hcTest2/Hc");
36         System.out.println(result);
37     }

post方式 就要考虑提交的表单内容怎么传输了。本文name和pass就是表单的值了。

封装表单属性可以用json也可以用传统的表单,如果是传统表单的话 要注意,也就是在上边代码注释那部分。用这种方式的话在servlet里也就是数据处理层可以通过request.getParameter(”string“)直接获取到属性值。就是相比json这种要简单一点,不过在实际开发中一般都是用json做数据传输的。用json的话有两种选择一个是阿里巴巴的fastjson还有一个就是谷歌的gson。fastjson相比效率比较高,gson适合解析有规律的json数据。博主这里用的是fastjson。还有用json的话在数据处理层要用流来读取表单属性,这就是相比传统表单多的一点内容。代码下边已经有了。

 1 public class HcServlet extends HttpServlet {
 2     private static final long serialVersionUID = 1L;
 3
 4     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 5         doPost(request, response);
 6     }
 7
 8
 9     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
10
11         request.setCharacterEncoding("UTF-8");
12         response.setContentType("text/html;charset=UTF-8");
13         String acceptjson = "";
14         User user = new User();
15         BufferedReader br = new BufferedReader(new InputStreamReader(
16                 (ServletInputStream) request.getInputStream(), "utf-8"));
17         StringBuffer sb = new StringBuffer("");
18         String temp;
19         while ((temp = br.readLine()) != null) {
20             sb.append(temp);
21         }
22         br.close();
23         acceptjson = sb.toString();
24         if (acceptjson != "") {
25             JSONObject jo = JSONObject.parseObject(acceptjson);
26             user.setUsername(jo.getString("name"));
27             user.setPassword(jo.getString("pass"));
28         }
29
30         request.setAttribute("user", user);
31         request.getRequestDispatcher("/message.jsp").forward(request, response);
32     }
33 }

原文地址:https://www.cnblogs.com/cristin/p/8427667.html

时间: 2024-10-01 15:02:43

httpclient模拟post请求json封装表单数据的相关文章

request对象封装表单数据

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // test1(request); // test2(request); test3(request); } //获取单个控件的值 public void test1(HttpServletRequest request){ String name = request

axios发送post请求,提交表单数据

解决办法一 你要是看下用法就解决了... https://www.npmjs.com/package- 或者 https://github.com/mzabriskie- 1 axios({ 2 url: '/user', 3 method: 'post', 4 data: { 5 firstName: 'Fred', 6 lastName: 'Flintstone' 7 }, 8 transformRequest: [function(data) { 9 10 let ret = '' 11

【flask】处理表单数据

 表单数据的处理涉及很多内容,除去表单提交不说,从获取数据到保存数据大致会经历以下步骤: 解析请求,获取表单数据. 对数据进行必要的转换,比如将勾选框的植转换为Python的布尔值. 验证数据是否符合要求,同时验证CSRF令牌 如果验证未通过则需要生成错误消息,并在模板中显示错误消息. 如果通过验证,就把数据保存到数据库或做进一步处理. 验证表单数据 1. 客户端验证和服务器端验证表单的验 证通 常分为 以下两种形式:( 1)客户端验证客户端验证( client side validation)

利用socket模拟http的混合表单上传(在一个请求中提交表单并上传多个文件)

在很多企业级应用中,我们都没法直接通过开发语言sdk包封装的http工具来模拟http复合表单(multipart/form-data),特别是在跨语言跨平台的编程过程中,其实实现方案并不复杂,只要你了解了http协议中复合表单的报文结构就很简单了: httpheader ------时间戳------ 表单参数1 ------时间戳------ 表单参数2 ------时间戳------ 文件1的描述+二进制信息 ------时间戳------ 文件2的描述+二进制信息 下面我们进一步以一段c

爬虫模拟登陆之formdata表单数据

首先HTTP协议是个无连接的协议,浏览器和服务器之间是以循环往复的请求回复来交互的,交互的形式是以文件形式来进行的.比如在chrome开发者工具network中看到了 每一行是一个文件,又文件大小啊,文件类型啊,比如脚本,图片等. 根据协议,把每个文件的内容按照协议格式填入HTTP数据协议结构,其中,对于爬虫模拟登陆来说最重要的是表单数据formdata这个字段 在这我们看到又loginname字段,又password字段,我们看到这都是明码,所以做了遮挡.我们得到了这个,就可以根据字段名称自己

封装表单自定义错误信息。(阻止默认错误信息提示,添加自定义错误信息提示)

1 前台提交信息到后台,两种表单验证: 2 1,form 表单验证 3 2,ajax 无刷新页面提交 4 5 表单验证方法一般有: 6 1,浏览器端验证 7 2,服务器端验证 8 3,ajax验证 9 4,浏览器和服务器双重验证 10 11 html5表单新增类型: 12 email,url,number,range,data(date,month,week,time,datetime,datetime-local),search,color,tel等 13 ======== 14 重点:pat

【ASP.NET Web API教程】5.2 发送HTML表单数据:URL编码的表单数据

注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面的内容. 5.2 Sending HTML Form Data 5.2 发送HTML表单数据 本文引自:http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1 By Mike Wasson|June 15, 2012 作者:Mike Wasson | 日期:2012-6-15 Part

使用jQuery实现跨域提交表单数据

我们在WEB开发中有时会遇到这种情况,比如要从A网站收集用户信息,提交给B网站处理,这个时候就会涉及到跨域提交数据的问题.本文将给您介绍如何使用jQuery来实现异步跨域提交表单数据. 在jQuery中,我们使用json数据类型,通过getJSON方法来实现从服务端获取或发送数据,而当要向不同远程服务器端提交或者获取数据时,要采用jsonp数据类型.使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面.服务器端应当在JSON数据前加上回调函数名,以便

struts2入门之struts2获取表单数据

在上一篇博文中分享了action如何获取表单数据,在本篇博文中分享一下用struts2这个框架如何来获取表单数据. struts2获取表单数据可以分为三种方式: 1.属性封装 2.模型驱动封装 3.表达式封装 分别介绍以上三种方式: 属性封装的步骤:首先在action中定义成员变量,并写set方法(这里为了避免和后面的混淆,把get和set方法都写上得了),然后该action要访问的form表单中的属性值要和定义的成员变量名称一样,在action访问到jsp页面时,form表单中的数据都已经拿到