黑马程序员技术交流社区
标题: 【郑州校区】httpclientutils [打印本页]
作者: 我是楠楠 时间: 2018-5-17 15:12
标题: 【郑州校区】httpclientutils
本帖最后由 我是楠楠 于 2018-5-17 15:13 编辑
HttpUtils.java中有两个公共的静态方法,一个是URLPost,另一个是URLGet,一目了然,前者是提供POST方式提交数据的,后者是提供GET方式提交数据的。其中所需要传送的数据以地图的方式传入,剩下的工作就交给我这个HttpUtils吧!当然如果的Http服务器端对所提交的数据的编码有要求的话,也没问题,你可以传入UTF-8或者GBK,当然大家还可自行增加
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/ **
* HTTP工具类
*
* @李作洋
*
* /
公共类HttpUtils {
private static Log log = LogFactory.getLog(HttpUtils.class);
/ **
*定义编码格式UTF-8
* /
public static final String URL_PARAM_DECODECHARSET_UTF8 =“UTF-8”;
/ **
*定义编码格式GBK
* /
public static final String URL_PARAM_DECODECHARSET_GBK =“GBK”;
private static final String URL_PARAM_CONNECT_FLAG =“&”;
private static final String EMPTY =“”;
private static MultiThreadedHttpConnectionManager connectionManager = null;
private static int connectionTimeOut = 25000;
private static int socketTimeOut = 25000;
private static int maxConnectionPerHost = 20;
private static int maxTotalConnections = 20;
私有静态HttpClient客户端;
静态的{
connectionManager = new MultiThreadedHttpConnectionManager();
。connectionManager.getParams()setConnectionTimeout(connectionTimeOut);
。connectionManager.getParams()setSoTimeout(了socketTimeout);
connectionManager.getParams()setDefaultMaxConnectionsPerHost(maxConnectionPerHost)。
connectionManager.getParams()setMaxTotalConnections(maxTotalConnections)。
client = new HttpClient(connectionManager);
}
/ **
* POST方式提交数据
* @参数网址
*待请求的网址
* @参数params
*要提交的数据
* @param enc
*编码
* @返回
*响应结果
* @抛出IOException
* IO异常
* /
public static String URLPost(String url,Map <String,String> params,String enc){
字符串响应= EMPTY;
PostMethod postMethod = null;
尝试{
postMethod = new PostMethod(url);
postMethod.setRequestHeader(“Content-Type”,“application / x-www-form-urlencoded; charset =”+ enc);
//将表单的值放入的PostMethod中
Set <String> keySet = params.keySet();
for(String key:keySet){
String value = params.get(key);
postMethod.addParameter(key,value);
}
//执行的PostMethod
int statusCode = client.executeMethod(postMethod);
if(statusCode == HttpStatus.SC_OK){
response = postMethod.getResponseBodyAsString();
}其他{
log.error(“响应状态码=”+ postMethod.getStatusCode());
}
} catch(HttpException e){
log.error(“发生致命的异常,可能是协议不对或者返回的内容有问题”,e);
e.printStackTrace();
} catch(IOException e){
log.error(“发生网络异常”,e);
e.printStackTrace();
}最后{
if(postMethod!= null){
postMethod.releaseConnection();
postMethod = null;
}
}
回复回复;
}
/ **
* GET方式提交数据
* @参数网址
*待请求的网址
* @参数params
*要提交的数据
* @param enc
*编码
* @返回
*响应结果
* @抛出IOException
* IO异常
* /
public static String URLGet(String url,Map <String,String> params,String enc){
字符串响应= EMPTY;
GetMethod getMethod = null;
StringBuffer strtTotalURL = new StringBuffer(EMPTY);
if(strtTotalURL.indexOf(“?”)== -1){
strtTotalURL.append(url).append(“?”)。append(getUrl(params,enc));
} else {
strtTotalURL.append(url).append(“&”)。append(getUrl(params,enc));
}
log.debug(“GET请求URL = \ n”+ strtTotalURL.toString());
尝试{
getMethod = new GetMethod(strtTotalURL.toString());
getMethod.setRequestHeader(“Content-Type”,“application / x-www-form-urlencoded; charset =”+ enc);
//执行getMethod
int statusCode = client.executeMethod(getMethod);
if(statusCode == HttpStatus.SC_OK){
response = getMethod.getResponseBodyAsString();
}其他{
log.debug(“响应状态码=”+ getMethod.getStatusCode());
}
} catch(HttpException e){
log.error(“发生致命的异常,可能是协议不对或者返回的内容有问题”,e);
e.printStackTrace();
} catch(IOException e){
log.error(“发生网络异常”,e);
e.printStackTrace();
}最后{
if(getMethod!= null){
getMethod.releaseConnection();
getMethod = null;
}
}
回复回复;
}
/ **
*据地图生成URL字符串
* @param地图
*地图
* @param valueEnc
*网址编码
* @返回
*网址
* /
private static String getUrl(Map <String,String> map,String valueEnc){
if(null == map || map.keySet()。size()== 0){
返回(EMPTY);
}
StringBuffer url = new StringBuffer();
设置<String> keys = map.keySet();
for(Iterator <String> it = keys.iterator(); it.hasNext();){
String key = it.next();
if(map.containsKey(key)){
String val = map.get(key);
String str = val!= null?val:EMPTY;
尝试{
str = URLEncoder.encode(str,valueEnc);
} catch(UnsupportedEncodingException e){
e.printStackTrace();
}
url.append(键).append( “=”)附加(STR).append(URL_PARAM_CONNECT_FLAG)。
}
}
String strURL = EMPTY;
strURL = url.toString();
if(URL_PARAM_CONNECT_FLAG.equals(EMPTY + strURL.charAt(strURL.length() - 1))){
strURL = strURL.substring(0,strURL.length() - 1);
}
返回(strURL);
}
}
传智播客·黑马程序员郑州校区地址
河南省郑州市高新区长椿路11号大学科技园(西区)东门8号楼三层
联系电话0371-56061160 / 61/62
来校路线地铁一号线梧桐街站A口出
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |