package com.actiz.web.http;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.log4j.Logger;
/**
* httpclient使用
* url访问的地址
* params传入的参数:username=zhangmingkun&password=zhangmingkun
* paramMap也是传入的参数:paramMap.put("username","zhangmingkun");
* files 传入的文件:List<FIle>
* encode访问地址的编码方式
* @author Administrator
*张明坤
*/
public class HttpClientUtils {
static Logger logger=Logger.getLogger(HttpClientUtils.class);
private final static String SENDMETHOD_GET="GET";
private final static String SENDMETHOD_POST="POST";
//private final static String ENCODED="UTF-8";
public static String sendGet(String url,String encode) {
HttpUriRequest request=getHttpClient(SENDMETHOD_GET, url, null,encode);
return execute(request,encode);
}
public static String sendGet(String url,String params,String encode) {
HttpUriRequest request=getHttpClient(SENDMETHOD_GET, url, getMapByParams(params),encode);
return execute(request,encode);
}
public static String sendGet(String url,Map<String, String> paramMap,String encode) {
HttpUriRequest request=getHttpClient(SENDMETHOD_GET, url, paramMap,encode);
return execute(request,encode);
}
public static String sendPost(String url,String encode) {
HttpUriRequest request=getHttpClient(SENDMETHOD_POST, url, null,encode);
return execute(request,encode);
}
public static String sendPost(String url,String params,String encode) {
HttpUriRequest request=getHttpClient(SENDMETHOD_POST, url, getMapByParams(params),encode);
return execute(request,encode);
}
public static String sendPost(String url,Map<String, String> paramMap,String encode) {
HttpUriRequest request=getHttpClient(SENDMETHOD_POST, url, paramMap,encode);
return execute(request,encode);
}
public static String sendPost(String url,String params,List<File> files,String encode) {
HttpUriRequest request=getHttpClientByFile(url, getMapByParams(params),files,encode);
return execute(request,encode);
}
public static String sendPost(String url,Map<String, String> paramMap,List<File> files,String encode) {
HttpUriRequest request=getHttpClientByFile(url, paramMap,files,encode);
return execute(request,encode);
}
private static HttpUriRequest getHttpClient(String method,String url,Map<String, String> paramMap,String encode){
HttpUriRequest request=null;
if (method.equals(SENDMETHOD_GET)) {
HttpGet httpGet =null;
if (paramMap!=null && paramMap.size()>0) {
httpGet =new HttpGet(getUrlByParamMap(url, paramMap));
}else {
httpGet =new HttpGet(url);
}
request=httpGet;
}else if (method.equals(SENDMETHOD_POST)) {
HttpPost httpPost =new HttpPost(url);
if (paramMap!=null && paramMap.size()>0) {
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
HttpEntity entity=null;
for (String key : paramMap.keySet()) {
formParams.add(new BasicNameValuePair(key, paramMap.get(key)));
}
try {
entity = new UrlEncodedFormEntity(formParams, encode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
httpPost.setEntity(entity);
}
request=httpPost;
}
return request;
}
private static HttpUriRequest getHttpClientByFile(String url,Map<String, String> paramMap,List<File> files,String encode){
HttpUriRequest request=null;
MultipartEntity entity = new MultipartEntity();
try {
if (paramMap!=null && paramMap.size()>0) {
for (String key : paramMap.keySet()) {
entity.addPart(key, new StringBody(paramMap.get(key), Charset.forName(encode)));
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (files!=null && files.size()>0) {
for(File file:files){
FileBody fileBody=new FileBody(file,file.getName(),"",encode);
entity.addPart(file.getName(), fileBody);
}
}
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(entity);
request=httpPost;
return request;
}
private static Map<String, String> getMapByParams(String params){
if (params==null || params.length()==0) {
return null;
}
Map<String, String> mapParams=new HashMap<String, String>();
String [] paramArray=params.trim().split("&");
if (paramArray!=null && paramArray.length>0) {
for (int i = 0; i < paramArray.length; i++) {
if (paramArray[i]!=null && paramArray[i].contains("=")) {
String [] paramStrings=paramArray[i].trim().split("=");
if (paramStrings[0]!=null && paramStrings[0].length()>0) {
mapParams.put(paramStrings[0], paramStrings[1]);
}
}
}
}
return mapParams;
}
private static String getUrlByParamMap(String url,Map<String, String> params){
if (url==null) {
logger.debug("url is null !!!!");
}
StringBuffer param = new StringBuffer();
int i = 0;
for (String key : params.keySet()) {
if (i == 0 && !url.contains("?")){
param.append("?");
}else{
param.append("&");
}
param.append(key).append("=").append(params.get(key));
i++;
}
url += param;
logger.debug("Http send url:"+url);
return url;
}
private static String execute(HttpUriRequest request,String encode) {
HttpClient httpClient = new DefaultHttpClient();
httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, encode);
HttpResponse response;
HttpEntity entity=null;
InputStream stream=null;
try {
response = httpClient.execute(request);
entity = response.getEntity();
stream=entity.getContent();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
StringBuffer document = new StringBuffer();
String line = null;
BufferedReader reader;
try {
reader = new BufferedReader(new InputStreamReader(stream,encode));
while ((line = reader.readLine()) != null) {
document.append(line);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
httpClient.getConnectionManager().shutdown();
return document.toString();
}
}
HTTP访问远程的方法如同表单提交一样,需要访问远程的方法,超有用的;没有webservice那么复杂,可以传送文件
用到的jar:commons-codec-1.4.jar
commons-logging-1.1.1.jar
httpclient-4.1.3.jar
httpclient-cache-4.1.3.jar
httpcore-4.1.4.jar
httpmime-4.1.3.jar
log4j-1.2.14.jar