HttpClient4.5 post请求xml到服务器

时间:2024-01-20 16:16:21

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. }