zoukankan      html  css  js  c++  java
  • (二)HttpClient Post请求

    原文链接:https://blog.csdn.net/justry_deng/article/details/81042379

    POST无参:

        /**
    	 * POST---无参测试
    	 *
    	 * @date 2018年7月13日 下午4:18:50
    	 */
    	@Test
    	public void doPostTestOne() {
     
    		// 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)
    		CloseableHttpClient httpClient = HttpClientBuilder.create().build();
     
    		// 创建Post请求
    		HttpPost httpPost = new HttpPost("http://localhost:12345/doPostControllerOne");
    		// 响应模型
    		CloseableHttpResponse response = null;
    		try {
    			// 由客户端执行(发送)Post请求
    			response = httpClient.execute(httpPost);
    			// 从响应模型中获取响应实体
    			HttpEntity responseEntity = response.getEntity();
     
    			System.out.println("响应状态为:" + response.getStatusLine());
    			if (responseEntity != null) {
    				System.out.println("响应内容长度为:" + responseEntity.getContentLength());
    				System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));
    			}
    		} catch (ClientProtocolException e) {
    			e.printStackTrace();
    		} catch (ParseException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				// 释放资源
    				if (httpClient != null) {
    					httpClient.close();
    				}
    				if (response != null) {
    					response.close();
    				}
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    

    POST有参(普通参数):

    注:POST传递普通参数时,方式与GET一样即可,这里以直接在url后缀上参数的方式示例。

        /**
    	 * POST---有参测试(普通参数)
    	 *
    	 * @date 2018年7月13日 下午4:18:50
    	 */
    	@Test
    	public void doPostTestFour() {
     
    		// 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)
    		CloseableHttpClient httpClient = HttpClientBuilder.create().build();
     
    		// 参数
    		StringBuffer params = new StringBuffer();
    		try {
    			// 字符数据最好encoding以下;这样一来,某些特殊字符才能传过去(如:某人的名字就是“&”,不encoding的话,传不过去)
    			params.append("name=" + URLEncoder.encode("&", "utf-8"));
    			params.append("&");
    			params.append("age=24");
    		} catch (UnsupportedEncodingException e1) {
    			e1.printStackTrace();
    		}
     
    		// 创建Post请求
    		HttpPost httpPost = new HttpPost("http://localhost:12345/doPostControllerFour" + "?" + params);
     
    		// 设置ContentType(注:如果只是传普通参数的话,ContentType不一定非要用application/json)
    		httpPost.setHeader("Content-Type", "application/json;charset=utf8");
     
    		// 响应模型
    		CloseableHttpResponse response = null;
    		try {
    			// 由客户端执行(发送)Post请求
    			response = httpClient.execute(httpPost);
    			// 从响应模型中获取响应实体
    			HttpEntity responseEntity = response.getEntity();
     
    			System.out.println("响应状态为:" + response.getStatusLine());
    			if (responseEntity != null) {
    				System.out.println("响应内容长度为:" + responseEntity.getContentLength());
    				System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));
    			}
    		} catch (ClientProtocolException e) {
    			e.printStackTrace();
    		} catch (ParseException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				// 释放资源
    				if (httpClient != null) {
    					httpClient.close();
    				}
    				if (response != null) {
    					response.close();
    				}
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    

    POST有参(对象参数):

    先给出User类:

    	/**
    	 * POST---有参测试(对象参数)
    	 *
    	 * @date 2018年7月13日 下午4:18:50
    	 */
    	@Test
    	public void doPostTestTwo() {
     
    		// 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)
    		CloseableHttpClient httpClient = HttpClientBuilder.create().build();
     
    		// 创建Post请求
    		HttpPost httpPost = new HttpPost("http://localhost:12345/doPostControllerTwo");
    		User user = new User();
    		user.setName("潘晓婷");
    		user.setAge(18);
    		user.setGender("女");
    		user.setMotto("姿势要优雅~");
    		// 我这里利用阿里的fastjson,将Object转换为json字符串;
    		// (需要导入com.alibaba.fastjson.JSON包)
    		String jsonString = JSON.toJSONString(user);
     
    		StringEntity entity = new StringEntity(jsonString, "UTF-8");
     
    		// post请求是将参数放在请求体里面传过去的;这里将entity放入post请求体中
    		httpPost.setEntity(entity);
     
    		httpPost.setHeader("Content-Type", "application/json;charset=utf8");
     
    		// 响应模型
    		CloseableHttpResponse response = null;
    		try {
    			// 由客户端执行(发送)Post请求
    			response = httpClient.execute(httpPost);
    			// 从响应模型中获取响应实体
    			HttpEntity responseEntity = response.getEntity();
     
    			System.out.println("响应状态为:" + response.getStatusLine());
    			if (responseEntity != null) {
    				System.out.println("响应内容长度为:" + responseEntity.getContentLength());
    				System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));
    			}
    		} catch (ClientProtocolException e) {
    			e.printStackTrace();
    		} catch (ParseException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				// 释放资源
    				if (httpClient != null) {
    					httpClient.close();
    				}
    				if (response != null) {
    					response.close();
    				}
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    

      

    POST有参(普通参数 + 对象参数):

    注:POST传递普通参数时,方式与GET一样即可,这里以通过URI获得HttpPost的方式为例。

    先给出User类:

    	/**
    	 * POST---有参测试(普通参数 + 对象参数)
    	 *
    	 * @date 2018年7月13日 下午4:18:50
    	 */
    	@Test
    	public void doPostTestThree() {
     
    		// 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)
    		CloseableHttpClient httpClient = HttpClientBuilder.create().build();
     
    		// 创建Post请求
    		// 参数
    		URI uri = null;
    		try {
    			// 将参数放入键值对类NameValuePair中,再放入集合中
    			List<NameValuePair> params = new ArrayList<>();
    			params.add(new BasicNameValuePair("flag", "4"));
    			params.add(new BasicNameValuePair("meaning", "这是什么鬼?"));
    			// 设置uri信息,并将参数集合放入uri;
    			// 注:这里也支持一个键值对一个键值对地往里面放setParameter(String key, String value)
    			uri = new URIBuilder().setScheme("http").setHost("localhost").setPort(12345)
    					.setPath("/doPostControllerThree").setParameters(params).build();
    		} catch (URISyntaxException e1) {
    			e1.printStackTrace();
    		}
     
    		HttpPost httpPost = new HttpPost(uri);
    		// HttpPost httpPost = new
    		// HttpPost("http://localhost:12345/doPostControllerThree1");
     
    		// 创建user参数
    		User user = new User();
    		user.setName("潘晓婷");
    		user.setAge(18);
    		user.setGender("女");
    		user.setMotto("姿势要优雅~");
     
    		// 将user对象转换为json字符串,并放入entity中
    		StringEntity entity = new StringEntity(JSON.toJSONString(user), "UTF-8");
     
    		// post请求是将参数放在请求体里面传过去的;这里将entity放入post请求体中
    		httpPost.setEntity(entity);
     
    		httpPost.setHeader("Content-Type", "application/json;charset=utf8");
     
    		// 响应模型
    		CloseableHttpResponse response = null;
    		try {
    			// 由客户端执行(发送)Post请求
    			response = httpClient.execute(httpPost);
    			// 从响应模型中获取响应实体
    			HttpEntity responseEntity = response.getEntity();
     
    			System.out.println("响应状态为:" + response.getStatusLine());
    			if (responseEntity != null) {
    				System.out.println("响应内容长度为:" + responseEntity.getContentLength());
    				System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));
    			}
    		} catch (ClientProtocolException e) {
    			e.printStackTrace();
    		} catch (ParseException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				// 释放资源
    				if (httpClient != null) {
    					httpClient.close();
    				}
    				if (response != null) {
    					response.close();
    				}
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    

      

      

  • 相关阅读:
    CSS3——复杂选择器
    单元测试覆盖率设置
    你必须了解的「架构」小历史
    js正则表达式:学习网址和部分正则验证
    转: js实现全角半角检测的方法
    Linux and the Unix Philosophy(1)
    HTML DOM 对象
    理解css中的 content:" " 是什么意思
    JS
    js
  • 原文地址:https://www.cnblogs.com/lvchengda/p/13035867.html
Copyright © 2011-2022 走看看