124 lines
4.1 KiB
Java
124 lines
4.1 KiB
Java
package com.tenwa.httpclient;
|
|
|
|
|
|
|
|
import org.apache.commons.httpclient.params.HttpClientParams;
|
|
import org.apache.commons.io.IOUtils;
|
|
import org.codehaus.xfire.client.Client;
|
|
import org.codehaus.xfire.transport.http.CommonsHttpMessageSender;
|
|
import org.w3c.dom.Document;
|
|
|
|
import javax.net.ssl.HttpsURLConnection;
|
|
import javax.xml.bind.JAXBContext;
|
|
import javax.xml.bind.Unmarshaller;
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.StringReader;
|
|
import java.net.URL;
|
|
import java.net.URLConnection;
|
|
import java.util.zip.ZipEntry;
|
|
import java.util.zip.ZipInputStream;
|
|
|
|
/**
|
|
* 鹏元工具类
|
|
*/
|
|
public class PyUtils {
|
|
|
|
/**
|
|
* 发起webservice请求
|
|
*
|
|
* @param urlStr
|
|
* @return
|
|
* @throws Exception
|
|
*/
|
|
public static String requestApi(String urlStr, String method, Object[] params) throws Exception {
|
|
String result = "";
|
|
try {
|
|
//调用webservice
|
|
URL url = new URL(urlStr);
|
|
Client client = null;
|
|
URLConnection conn = null;
|
|
if (urlStr.startsWith("https")) {
|
|
/**
|
|
* https 调用示例
|
|
*/
|
|
conn = (HttpsURLConnection) url.openConnection();
|
|
((HttpsURLConnection) conn).setSSLSocketFactory(PySSLContextUtil.createCustomerSSLContext().getSocketFactory());
|
|
|
|
} else {
|
|
/**
|
|
* http 调用示例
|
|
*/
|
|
conn = url.openConnection();
|
|
|
|
}
|
|
// 设置连接超时
|
|
conn.setConnectTimeout(5000);
|
|
// 设置读取超时
|
|
conn.setReadTimeout(5000);
|
|
client = new Client(conn.getInputStream(), null);
|
|
|
|
// 设置
|
|
HttpClientParams httpClientParams = new HttpClientParams();
|
|
// 单位毫秒: 这个超时时间是 等待数据返回的时间
|
|
httpClientParams.setSoTimeout(20000);
|
|
// 设置从 HTTP connection manager 获取一个HTTP connection 的超时时间
|
|
httpClientParams.setConnectionManagerTimeout(10000L);
|
|
// xfire client支持 避免 'Expect: 100-continue' handshake
|
|
httpClientParams.setBooleanParameter(HttpClientParams.USE_EXPECT_CONTINUE, Boolean.FALSE);
|
|
client.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS, httpClientParams);
|
|
//xfire client支持 取消长连接
|
|
client.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE, "true");
|
|
|
|
//得到子报告结果
|
|
Object[] results = client.invoke(method, params);
|
|
|
|
if (results[0] instanceof Document) {
|
|
Document doc = (Document) results[0];
|
|
result = doc.getFirstChild().getFirstChild().getNodeValue();
|
|
} else {
|
|
result = (String) results[0];
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* 解析报文(仅供参考)
|
|
*
|
|
* @param bodyStr
|
|
* @return
|
|
* @throws Exception
|
|
*/
|
|
public static WebServiceResult parseBody(String bodyStr) throws Exception {
|
|
JAXBContext context = JAXBContext.newInstance(WebServiceResult.class);
|
|
Unmarshaller unmarshaller = context.createUnmarshaller();
|
|
WebServiceResult result = (WebServiceResult) unmarshaller.unmarshal(new StringReader(bodyStr));
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* 解压缩
|
|
*
|
|
* @param data
|
|
* @return
|
|
* @throws Exception
|
|
*/
|
|
public static void decompress(byte[] data) throws Exception {
|
|
|
|
ByteArrayInputStream bais = new ByteArrayInputStream(data);
|
|
ZipInputStream zis = new ZipInputStream(bais);
|
|
ZipEntry ze = null;
|
|
while ((ze = zis.getNextEntry()) != null) {
|
|
System.out.println("文件名:" + ze.getName());
|
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
IOUtils.copy(zis, baos);
|
|
zis.closeEntry();
|
|
System.out.println("文件内容:" + new String(baos.toByteArray(), "GBK"));
|
|
}
|
|
}
|
|
|
|
}
|