关闭

基于java 使用http-post方式请求https webservice接口

标签: web servicejavahttpshttppost
2823人阅读 评论(0) 收藏 举报
分类:

本文章记录请求https接口的两种方式,安全证书默认全部接收。

本文记录两种请求https接口的方法,方法1经测试为可行,方法二由于缺jar包最后没有使用。希望可以帮到有需要的朋友。

第二种方式:
/**
* 请求https的接口

* @param url 接口地址
* @param requestSoap 请求报文
* @param charSet 编码方式
* @return
* @throws Exception
*/
public static Map<String,Object> doPost(String url,String requestSoap,String charSet) throws Exception{

String result ="";
int timeOut=0;
    CloseableHttpClient closeableHttpClient = createHttpsClient();
     // 建立HttpPost对象 
 PostMethod postMethod = new PostMethod(url);  
 HttpPost httppost = new HttpPost(url);
 byte[] b = new byte[0];  
 try {  
     b = requestSoap.getBytes(charSet);  
 } catch (UnsupportedEncodingException e) {  
     e.printStackTrace();  
 }  
 InputStream is = new ByteArrayInputStream(b, 0, b.length);
 HttpEntity httpEntity = new InputStreamEntity(is, b.length);
 httppost.setEntity(httpEntity);
 Map<String,Object> resultMap =new HashMap<>();
 try{
 //发送Post,并返回一个HttpResponse对象
 logger.info("开始发送请求");
 HttpResponse httpResponse = closeableHttpClient.execute(httppost);
 HttpEntity httpEntity2 = httpResponse.getEntity();
 // 如果状态码为200,就是正常返回
 int rspCode=httpResponse.getStatusLine().getStatusCode();
 if (rspCode== HttpStatus.SC_OK) {
 result= EntityUtils.toString(httpEntity2);
  // 得到返回的字符串
  logger.info("响应成功:"+result);
  resultMap.put("responseCode", rspCode);
  resultMap.put("responseXml", result);
 }else {
 result = EntityUtils.toString(httpEntity2);
 resultMap.put("responseCode", rspCode);
 resultMap.put("responseXml", result);
  // 得到返回的字符串
 }
 //关闭连接
 closeableHttpClient.close();
 }catch(IOException e) { 
 logger.info("执行http请求失败", e);
 }
 return resultMap;
}


/**
* 处理https请求安全证书问题(默认接受所有证书)

* @return
* @throws Exception
*/
public static CloseableHttpClient createHttpsClient() throws Exception {
X509TrustManager x509mgr = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] xcs, String string) {
}


@Override
public void checkServerTrusted(X509Certificate[] xcs, String string) {
}


@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
// 设置超时时间
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setSocketTimeout(5000).setConnectTimeout(5000)
.setConnectionRequestTimeout(5000)
.setStaleConnectionCheckEnabled(true).build();
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[] { x509mgr },
new java.security.SecureRandom());
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslContext,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
return HttpClients.custom().setSSLSocketFactory(sslsf)
.setDefaultRequestConfig(defaultRequestConfig).build();

}



第二种方式:

/**
* 字符串转OMElement

* @param xmlStr
* @param encoding
* @return
*/
public static OMElement toOMElement(String xmlStr, String encoding) {
OMElement xmlValue;
try {
xmlValue = new StAXOMBuilder(new ByteArrayInputStream(
xmlStr.getBytes(encoding))).getDocumentElement();
return xmlValue;
} catch (Exception e) {
return null;
}
}


public static void testDocument(String requestXml, String url) {
logger.info("--------into SoapUtil testDocument-------");
try {
// https方式访问webservices
// System.setProperty("javax.net.ssl.trustStorePassword",
// "netconfig");
System.setProperty("javax.net.ssl.trustStore",
"/uniproxy/jdk1.7.0_80/jre/lib/security/nciic.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
// String url =
// "http://localhost:8080/axis2ServerDemo/services/StockQuoteService";
// String url =
// "https://test.bjp2p.com.cn:8443/platformService?wsdl";


Options options = new Options();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference(url);
options.setTo(targetEPR);
// options.setAction("urn:getPrice");
// options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClient sender = new ServiceClient();
sender.setOptions(options);


OMFactory fac = OMAbstractFactory.getOMFactory();
/*
* String tns = "http://supervise.service.app.mp.zkbc.net/"; //
* 命名空间,有时命名空间不增加没事,不过最好加上,因为有时有事,你懂的 OMNamespace omNs =
* fac.createOMNamespace(tns, "");
*/
OMElement method = toOMElement(requestXml, "utf-8");
/*
* OMElement symbol = fac.createOMElement("arg0", omNs);

* symbol.addChild(fac.createOMText(symbol, "fylcws"));
* method.addChild(symbol); method.build(); OMElement symbol1 =
* fac.createOMElement("arg1", omNs);

* symbol1.addChild(fac.createOMText(symbol1, "fylcws@4r1"));
* method.addChild(symbol1); method.build();
*/
OMElement result;
result = sender.sendReceive(method);
logger.info("testDocument获取到返回-----------:" + result.toString());
} catch (AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// return result;
}

0
0
查看评论

httpclient妙用一 httpclient作为客户端调用webservice

httpclient妙用一 httpclient作为客户端调用webservice http://aperise.iteye.com/blog/2223454 httpclient妙用二 httpclient保持会话登录 http://aperise.iteye.com/blog/2223...
  • zilong_zilong
  • zilong_zilong
  • 2016-12-29 22:10
  • 5907

JavaScript实现WebService的http的Post请求

//*******************************javascript 这个脚本实现Webservice调用******************************************// function AjaxFunc() { var url=
  • lujianfeiccie2009
  • lujianfeiccie2009
  • 2011-08-24 16:45
  • 3297

java使用POST发送soap报文请求webservice返回500错误解析

本文使用JAX-WS2.2编译webservice,并使用HttpUrlConnection的POST方式对wsdl发送soap报文进行请求返回数据, 对错误Server returned HTTP response code: 500 的解决方法进行简单分析。
  • sec_ye
  • sec_ye
  • 2016-10-22 17:15
  • 5870

JAVA发送http get/post请求,调用http接口、方法

三个例子 —JAVA发送http get/post请求,调用http接口、方法例1:使用 HttpClient (commons-httpclient-3.0.jar jar下载地址:http://download.csdn.net/download/capmiachael/97605...
  • CapMiachael
  • CapMiachael
  • 2016-07-05 17:56
  • 48570

java调用webservice接口 几种方法

转载自http://af8991.iteye.com/blog/1702741 webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。今天搜索到...
  • qq_35124535
  • qq_35124535
  • 2017-03-15 15:31
  • 14171

WebService接口直接http调用方式

WebService接口除了用XFire和As方式调用,还可以直接用HttpClient 的方式直接调用哦! 例: private HashMap getData(String serviceCode, String xmlPara){ HashMap res = new HashM...
  • qq1130169218
  • qq1130169218
  • 2016-12-12 14:51
  • 4553

Httpclient远程调用WebService示例(Eclipse+httpclient

httpClient远程调用webservice的实例代码,亲测可用,留作备忘。
  • yh869585771
  • yh869585771
  • 2016-05-28 22:06
  • 5166

关于http请求和webservice请求的了解?

最近公司两个系统需要对接,但是系统和系统之间传输的数据量很大,使用http的 get/post 非常的麻烦,因此,我们的项目总监让我在网上看下webservice的请求。 刚刚开始的时候,对两个感觉很模糊,因为不管怎么样,毕竟他们的功能都差不多,都是请求数据,带参数。但是今天,我们经理说,其实we...
  • tx542009
  • tx542009
  • 2015-11-30 17:11
  • 740

java之使用HttpURLConnection调用WebService

package hz.vat.invoice.utils.paper; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import...
  • u010890857
  • u010890857
  • 2016-10-27 12:39
  • 1993

JAVA实现http/https的Post、Get、代理访问请求

前言平时测试的时候可能会遇到使用Java发送http或者https请求的需求.网上找了一圈暂时没有发现比较称心方便能够直接使用的代码.所以就借鉴别人的代码按自己需求改造了一下.主要实现http/https的get和post请求,并支持设置代理抓包.只需要一个Java文件就搞定,不需要第三方库支持.
  • M1mory
  • M1mory
  • 2017-08-08 22:13
  • 424
    个人资料
    • 访问:3377次
    • 积分:55
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档