apzl_leasing/src_tenwa/com/tenwa/httpclient/HttpClientUtil.java
2018-06-03 22:26:41 +08:00

200 lines
6.0 KiB
Java

package com.tenwa.httpclient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.httpclient.ConnectTimeoutException;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import com.amarsoft.are.ARE;
import com.tenwa.httpclient.resources.GPSConfigure;
public class HttpClientUtil {
public static String getData(String url, String methodType, Map<String, String> params,boolean flag) throws Exception {
long start = System.currentTimeMillis();
String result = "";
switch(methodType.toUpperCase()) {
case "GET":
result = loadDataGet(url, flag);
break;
case "POST":
result = loadDataPost(url, params, flag);
break;
default:
throw new RuntimeException("wrong method type");
}
long end = System.currentTimeMillis();
ARE.getLog().info("response time : " + (end - start) + "ms");
return result;
}
/**
* 通过POST的方式获取获得数据
* @param url
* @param params
* @return
* @throws Exception
*/
private static String loadDataPost(String url,Map<String, String> params, boolean flag) throws Exception {
HttpClient httpClient = new HttpClient();
String result = "";
PostMethod postMethod = null;
try {
postMethod = new PostMethod(url);
for(Entry<String, String> param : params.entrySet()) {
postMethod.addParameter(param.getKey(), param.getValue());
}
if(flag) {
postMethod.setRequestHeader("appkey", GPSConfigure.get("APPKEY"));
}
postMethod.getParams().setParameter(
HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
int statusCode = httpClient.executeMethod(postMethod);
if (statusCode == HttpStatus.SC_OK) {
InputStream txtis = postMethod.getResponseBodyAsStream();
BufferedReader br = new BufferedReader(new InputStreamReader(txtis,
"UTF-8"));
StringBuffer sbf = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
sbf.append(line);
}
result = sbf.toString();
ARE.getLog().info(result);
} else {
throw new RuntimeException(statusCode + "");
}
} catch(Exception e) {
throw new RuntimeException(e);
} finally {
if(postMethod != null) postMethod.releaseConnection();
}
return result;
}
/**
* 通过GET的方式获取数据
* @param url
* @param params
* @return
* @throws Exception
*/
private static String loadDataGet(String url, boolean flag) throws Exception {
HttpClient httpClient = new HttpClient();
String result = "";
GetMethod postMethod = null;
try {
postMethod = new GetMethod(url);
if(flag) {
postMethod.setRequestHeader("appkey", GPSConfigure.get("APPKEY"));
}
postMethod.getParams().setParameter(
HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
int statusCode = httpClient.executeMethod(postMethod);
if (statusCode == HttpStatus.SC_OK) {
InputStream txtis = postMethod.getResponseBodyAsStream();
BufferedReader br = new BufferedReader(new InputStreamReader(txtis,
"UTF-8"));
StringBuffer sbf = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
sbf.append(line);
}
result = sbf.toString();
ARE.getLog().info(result);
} else {
throw new RuntimeException(statusCode + "");
}
ARE.getLog().info(result);
} catch(Exception e) {
throw new RuntimeException(e);
} finally {
if(postMethod != null) postMethod.releaseConnection();
}
return result;
}
/**
* 通过使用CloseableHttpClient的
* @param url
* @param params
* @return
*/
private static String getDataPost(String url,Map<String, String> params) {
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000).setConnectionRequestTimeout(1000)
.build();
CloseableHttpClient httpclient = null;
CloseableHttpResponse result = null;
String resultString = "";
try {
httpclient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();
HttpPost postMethod = new HttpPost(url);
/*postMethod
.setHeader(
"User-Agent",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36");*/
postMethod.setHeader("Referer", url);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
for(Entry<String, String> param : params.entrySet()) {
nvps.add(new BasicNameValuePair(param.getKey(), param.getValue()));
}
// 添加参数
postMethod.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
result = httpclient.execute(postMethod);
HttpEntity repEntity = result.getEntity();
int statusCode = result.getStatusLine().getStatusCode();
if (statusCode != HttpStatus.SC_OK) {
return "410";
}
resultString = EntityUtils.toString(repEntity, "UTF-8");
ARE.getLog().info(resultString);
} catch (ConnectTimeoutException e) {
throw new RuntimeException(e);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (result != null) {
try {
result.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (httpclient != null) {
try {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return resultString;
}
}