1.加入HttpClient4.5和junit依赖包

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.apache.httpcomponents</groupId>
  4. <artifactId>httpclient</artifactId>
  5. <version>4.5</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>commons-collections</groupId>
  9. <artifactId>commons-collections</artifactId>
  10. <version>3.2.2</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>junit</groupId>
  14. <artifactId>junit</artifactId>
  15. <version>4.12</version>
  16. </dependency>
  17. </dependencies>

2.编写工具类

  1. import java.io.IOException;
  2. import java.security.cert.CertificateException;
  3. import java.security.cert.X509Certificate;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.Map;
  7. import org.apache.commons.collections.MapUtils;
  8. import org.apache.http.Consts;
  9. import org.apache.http.HeaderIterator;
  10. import org.apache.http.HttpEntity;
  11. import org.apache.http.HttpResponse;
  12. import org.apache.http.HttpStatus;
  13. import org.apache.http.NameValuePair;
  14. import org.apache.http.ParseException;
  15. import org.apache.http.client.entity.UrlEncodedFormEntity;
  16. import org.apache.http.client.methods.HttpPost;
  17. import org.apache.http.config.Registry;
  18. import org.apache.http.config.RegistryBuilder;
  19. import org.apache.http.conn.socket.ConnectionSocketFactory;
  20. import org.apache.http.conn.socket.PlainConnectionSocketFactory;
  21. import org.apache.http.conn.ssl.NoopHostnameVerifier;
  22. import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
  23. import org.apache.http.conn.ssl.TrustStrategy;
  24. import org.apache.http.entity.StringEntity;
  25. import org.apache.http.impl.client.CloseableHttpClient;
  26. import org.apache.http.impl.client.HttpClients;
  27. import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
  28. import org.apache.http.message.BasicNameValuePair;
  29. import org.apache.http.ssl.SSLContextBuilder;
  30. import org.apache.http.util.EntityUtils;
  31. /**
  32. *
  33. * @ClassName: HttpsUtils
  34. * @Description: TODO(https post忽略证书请求)
  35. */
  36. public class HttpsUtils {
  37. private static final String HTTP = "http";
  38. private static final String HTTPS = "https";
  39. private static SSLConnectionSocketFactory sslsf = null;
  40. private static PoolingHttpClientConnectionManager cm = null;
  41. private static SSLContextBuilder builder = null;
  42. static {
  43. try {
  44. builder = new SSLContextBuilder();
  45. // 全部信任 不做身份鉴定
  46. builder.loadTrustMaterial(null, new TrustStrategy() {
  47. @Override
  48. public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
  49. return true;
  50. }
  51. });
  52. sslsf = new SSLConnectionSocketFactory(builder.build(),
  53. new String[] { "SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2" }, null, NoopHostnameVerifier.INSTANCE);
  54. Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory> create()
  55. .register(HTTP, new PlainConnectionSocketFactory()).register(HTTPS, sslsf).build();
  56. cm = new PoolingHttpClientConnectionManager(registry);
  57. cm.setMaxTotal(200);// max connection
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. }
  61. }
  62. /**
  63. * httpClient post请求
  64. *
  65. * @param url
  66. *            请求url
  67. * @param header
  68. *            头部信息
  69. * @param param
  70. *            请求参数 form提交适用
  71. * @param entity
  72. *            请求实体 json/xml提交适用
  73. * @return 可能为空 需要处理
  74. * @throws Exception
  75. *
  76. */
  77. public static String post(String url, Map<String, String> header, Map<String, String> param, StringEntity entity)
  78. throws Exception {
  79. String result = "";
  80. CloseableHttpClient httpClient = null;
  81. try {
  82. httpClient = getHttpClient();
  83. //HttpGet httpPost = new HttpGet(url);//get请求
  84. HttpPost httpPost = new HttpPost(url);//Post请求
  85. // 设置头信息
  86. if (MapUtils.isNotEmpty(header)) {
  87. for (Map.Entry<String, String> entry : header.entrySet()) {
  88. httpPost.addHeader(entry.getKey(), entry.getValue());
  89. }
  90. }
  91. // 设置请求参数
  92. if (MapUtils.isNotEmpty(param)) {
  93. List<NameValuePair> formparams = new ArrayList<NameValuePair>();
  94. for (Map.Entry<String, String> entry : param.entrySet()) {
  95. // 给参数赋值
  96. formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
  97. }
  98. UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
  99. httpPost.setEntity(urlEncodedFormEntity);
  100. }
  101. // 设置实体 优先级高
  102. if (entity != null) {
  103. httpPost.addHeader("Content-Type", "text/xml");
  104. httpPost.setEntity(entity);
  105. }
  106. HttpResponse httpResponse = httpClient.execute(httpPost);
  107. int statusCode = httpResponse.getStatusLine().getStatusCode();
  108. System.out.println("状态码:"+statusCode);
  109. if (statusCode == HttpStatus.SC_OK) {
  110. HttpEntity resEntity = httpResponse.getEntity();
  111. result = EntityUtils.toString(resEntity);
  112. } else {
  113. readHttpResponse(httpResponse);
  114. }
  115. } catch (Exception e) {
  116. throw e;
  117. } finally {
  118. if (httpClient != null) {
  119. httpClient.close();
  120. }
  121. }
  122. return result;
  123. }
  1. <span style="white-space:pre;"> </span>
  1. /**
  2. * httpClient post请求
  3. *
  4. * @param url
  5. *            请求url
  6. * @param header
  7. *            头部信息
  8. * @param param
  9. *            请求参数 form提交适用
  10. * @param entity
  11. *            请求实体 json/xml提交适用 (指定参数名的方式来POST数据)
  12. * @return 可能为空 需要处理
  13. * @throws Exception
  14. *
  15. */
  16. public static String post(String url, Map<String, String> header, Map<String, String> param, HttpEntity entity)
  17. throws Exception {
  18. String result = "";
  19. CloseableHttpClient httpClient = null;
  20. try {
  21. httpClient = getHttpClient();
  22. //HttpGet httpPost = new HttpGet(url);//get请求
  23. HttpPost httpPost = new HttpPost(url);//Post请求
  24. // 设置头信息
  25. if (MapUtils.isNotEmpty(header)) {
  26. for (Map.Entry<String, String> entry : header.entrySet()) {
  27. httpPost.addHeader(entry.getKey(), entry.getValue());
  28. }
  29. }
  30. // 设置请求参数
  31. if (MapUtils.isNotEmpty(param)) {
  32. List<NameValuePair> formparams = new ArrayList<NameValuePair>();
  33. for (Map.Entry<String, String> entry : param.entrySet()) {
  34. // 给参数赋值
  35. formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
  36. }
  37. UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
  38. httpPost.setEntity(urlEncodedFormEntity);
  39. }
  40. // 设置实体 优先级高
  41. if (entity != null) {
  42. httpPost.setEntity(entity);
  43. }
  44. HttpResponse httpResponse = httpClient.execute(httpPost);
  45. int statusCode = httpResponse.getStatusLine().getStatusCode();
  46. System.out.println("状态码:"+statusCode);
  47. if (statusCode == HttpStatus.SC_OK) {
  48. HttpEntity resEntity = httpResponse.getEntity();
  49. result = EntityUtils.toString(resEntity);
  50. } else {
  51. readHttpResponse(httpResponse);
  52. }
  53. } catch (Exception e) {
  54. throw e;
  55. } finally {
  56. if (httpClient != null) {
  57. httpClient.close();
  58. }
  59. }
  60. return result;
  61. }
  1. public static CloseableHttpClient getHttpClient() throws Exception {
  2. CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(cm)
  3. .setConnectionManagerShared(true).build();
  4. return httpClient;
  5. }
  6. public static String readHttpResponse(HttpResponse httpResponse) throws ParseException, IOException {
  7. StringBuilder builder = new StringBuilder();
  8. // 获取响应消息实体
  9. HttpEntity entity = httpResponse.getEntity();
  10. // 响应状态
  11. builder.append("status:" + httpResponse.getStatusLine());
  12. builder.append("headers:");
  13. HeaderIterator iterator = httpResponse.headerIterator();
  14. while (iterator.hasNext()) {
  15. builder.append("\t" + iterator.next());
  16. }
  17. // 判断响应实体是否为空
  18. if (entity != null) {
  19. String responseString = EntityUtils.toString(entity);
  20. builder.append("response length:" + responseString.length());
  21. builder.append("response content:" + responseString.replace("\r\n", ""));
  22. }
  23. return builder.toString();
  24. }
  25. }

3.测试类

  1. @Test
  2. public void testSendHttpPost2() {
  3. String url = "https://XXXX.XXX.XXX.XXX/XXX/XXX.html";
  4. try {
  5. StringEntity entity = new StringEntity(getXMLString(), "UTF-8"); //<span style="color:rgb(85,85,85);font-family:'宋体', 'Arial Narrow', arial, serif;font-size:14px;">不指定参数名的方式来POST数据</span>
  6. String responseContent = HttpsUtils.post(url, null, null, entity);
  7. System.out.println(responseContent);
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10. }
  11. }
    1. @Test
    2. public void testSendHttpPost3() {//https://209.160.54.4/suns/XML_Rx.php
    3. String url = "http://10.122.1.92:8080/products.html";
    4. try {
    5. List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    6. formparams.add(new BasicNameValuePair("xmldate", "<html>你好啊啊</html>")); //<span style="color:rgb(85,85,85);font-family:'宋体', 'Arial Narrow', arial, serif;font-size:14px;">指定参数名的方式来POST数据</span>
    7. UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
    8. String responseContent = HttpsUtils.post(url, null, null, entity);
    9. System.out.println(responseContent);
    10. } catch (Exception e) {
    11. e.printStackTrace();
    12. }
    13. }

HttpClient4.5 post请求xml到服务器的更多相关文章

  1. js进阶ajax基本用法(创建对象,连接服务器,发送请求,获取服务器传过来的数据)

    js进阶ajax基本用法(创建对象,连接服务器,发送请求,获取服务器传过来的数据) 一.总结 1.ajax的浏览器的window对象的XMLHtmlRequest对象的两个重要方法:open(),se ...

  2. WebRequest请求错误(服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF)

    WebRequest请求错误(服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF)解决办法,天津config文件,增加一个配置如下 <?x ...

  3. Fiddler 使用fiddler发送捕获的请求及模拟服务器返回

    使用fiddler发送捕获的请求及模拟服务器返回 by:授客 QQ:1033553122 1.做好相关监听及代理设置 略 2.发送捕获的请求 如图 3.模拟服务器返回 本例的一个目的是,根据服务器返回 ...

  4. Ant运行build.xml执行服务器scp,异常解决jsch.jar

    公司ant打包上线 一直出现这个问题. Ant运行build.xml执行服务器scp,异常解决jsch.jar BUILD FAILEDD:\eclipse\eclipse-jee-luna-SR2- ...

  5. 如何利用fiddler篡改发送请求和截取服务器信息

    一.断点的两种方式 1.before response:在request请求未到达服务器之前打断 2.after response:在服务器响应之后打断 二.全局打断 1.全局打断就是中断fiddle ...

  6. js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq

    js_html_input中autocomplete="off"在chrom中失效的解决办法 分享网上的2种办法: 1-可以在不需要默认填写的input框中设置 autocompl ...

  7. http400错误基本都是http请求参数与服务器接收参数不匹配

    http400错误基本都是http请求参数与服务器接收参数不匹配造成的, 如:1)post请求,你发了个get请求 2)content-type指定不匹配致使参数无法读出来

  8. C/C++使用libcurl库发送http请求(get和post可以用于请求html信息,也可以请求xml和json等串)

    C++要实现http网络连接,需要借助第三方库,libcurl使用起来还是很方便的 环境:win32 + vs2015 如果要在Linux下使用,基本同理 1,下载编译libcurl 下载curl源码 ...

  9. flask 设置https请求 访问flask服务器

    学习过程中想要学教程中一样,做个假的微信公众号推送,不过去了微信开发文档怎么一直说需要https的请求(教学中没有说需要https,一直是http) 但是我的服务器只能使用http请求访问,如果硬是要 ...

随机推荐

  1. You may rarely look at it. But you'll always feel it

    You may rarely look at it. But you'll always feel it

  2. 学习MySQL(下)

    具体实例 22.MySQL ALTER命令 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 1.如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使 ...

  3. log4net使用注意事项

    1配置Log4net Log4net的配置文件有几种使用方式,这里将配置log4net的部分独立出来,即关于log4net的配置独立成文件log4net.config. 1)写入Mysql log4n ...

  4. PHP的AES加密类

    PHP的AES加密类 aes.php <?php /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...

  5. TL-WR703Nv1.7刷写openwrt固件

    TP-LINK TL-WR703N是一个小型的路由器,可以有线转WiFi,3G转WiFi,很多人拿它刷openwrt系统,然后可以在上面各种搞事. V1.7以前 通常刷openwrt的做法是, 下载一 ...

  6. cap deploy:setup报错

    今天部署cap的时候,setup出现以下错误: 查询半天未果,不过最后还是在google找到了,可见度娘极为不靠谱! I had the same error on deploy:setup with ...

  7. sqlserver 查询所有表及记录行数

    --查询所有表名 select name from sysobjects where xtype='u' select * from sys.tables --查询所有表名及对应架构 select t ...

  8. Python函数篇(5)-装饰器及实例讲解

    1.装饰器的概念   装饰器本质上就是一个函数,主要是为其他的函数添加附加的功能,装饰器的原则有以下两个: 装饰器不能修改被修饰函数的源代码 装饰器不能修改被修改函数的调用方式   装饰器可以简单的理 ...

  9. node.js之fs模块

    一.fs模块的mkdir函数,创建文件夹 var http = require("http"); var fs = require("fs"); var ser ...

  10. 小tip:生成一组不重复的随机数(去重的方法)

    var arr = []; for(var i=0;i<150;i++){ // num为0-100的随机数 var num = Math.round(Math.random()*100); v ...