原文:https://blog.csdn.net/justry_deng/article/details/82818856
1、依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.2</version>
</dependency>
2、工具类
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
public class HttpSendUtil {
/**
* 使用apache的HttpClient发送http
*
* @param wsdlURL
* 请求URL
* @param contentType
* 如:application/json;charset=utf8
* @param content
* 数据内容
*/
public static String doHttpPostByHttpClient(final String wsdlURL, final String contentType, final String content)
throws ClientProtocolException, IOException {
// 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
// 创建Post请求
HttpPost httpPost = new HttpPost(wsdlURL);
StringEntity entity = new StringEntity(content.toString(), "UTF-8");
// 将数据放入entity中
httpPost.setEntity(entity);
httpPost.setHeader("Content-Type", contentType);
// 响应模型
CloseableHttpResponse response = null;
String result = null;
try {
// 由客户端执行(发送)Post请求
response = httpClient.execute(httpPost);
// 从响应模型中获取响应实体
// 注意:和doHttpPostByRestTemplate方法用的不是同一个HttpEntity
org.apache.http.HttpEntity responseEntity = response.getEntity();
System.out.println("响应ContentType为:" + responseEntity.getContentType());
System.out.println("响应状态为:" + response.getStatusLine());
if (responseEntity != null) {
result = EntityUtils.toString(responseEntity);
System.out.println("响应内容为:" + result);
}
} finally {
// 释放资源
if (httpClient != null) {
httpClient.close();
}
if (response != null) {
response.close();
}
}
return result;
}
/**
* 使用springframework的RestTemplate发送http
*
* @param wsdlURL
* 请求URL
* @param contentType
* 如:application/json;charset=utf8
* @param content
* 数据内容
*/
public static String doHttpPostByRestTemplate(final String wsdlURL, final String contentType, final String content) {
// http使用无参构造;https需要使用有参构造
RestTemplate restTemplate = new RestTemplate();
// 解决中文乱码
List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();
converterList.remove(1);
HttpMessageConverter<?> converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
converterList.add(1, converter);
restTemplate.setMessageConverters(converterList);
// 设置Content-Type
HttpHeaders headers = new HttpHeaders();
headers.remove("Content-Type");
headers.add("Content-Type", contentType);
// 数据信息封装
// 注意:和doHttpPostByHttpClient方法用的不是同一个HttpEntity
org.springframework.http.HttpEntity<String> formEntity = new org.springframework.http.HttpEntity<String>(
content, headers);
String result = restTemplate.postForObject(wsdlURL, formEntity, String.class);
return result;
}
}
3、调用
public String getInfo(String loginName) throws IOException {
final String wsdlURL = "http://192.168.3.11/SendtoOAWebService/ToOAWebService.asmx";
// 设置编码。(因为是直接传的xml,所以我们设置为text/xml;charset=utf8)
final String contentType = "text/xml;charset=utf-8";
StringBuffer xMLcontent = new StringBuffer();
xMLcontent.append("<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">\n");
xMLcontent.append(" <soap12:Body>\n");
xMLcontent.append(" <GetPrintAndBurnInfo_ByKeyword xmlns=\"http://tempuri.org/\">\n");
xMLcontent.append(" <Keyword>" + loginName + "</Keyword>\n");
xMLcontent.append(" </GetPrintAndBurnInfo_ByKeyword>\n");
xMLcontent.append(" </soap12:Body>\n");
xMLcontent.append("</soap12:Envelope>");
String res = HttpSendUtil.doHttpPostByHttpClient(wsdlURL, contentType, xMLcontent.toString());
return renderType(true, "成功",res);
}