http访问远程链接(可以发送文件)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值