您的位置:首页 > 理论基础 > 计算机网络

java模拟http get和post 提交 httpclient

2016-01-07 10:20 686 查看
原文地址:http://blog.csdn.net/miniyaner/article/details/12423435

原文post的处理不是很方便,本人对其进行了改造,下面为改造完后的代码:

接收参数可以直接使用:request.getParameter("xxx")

使用httpclient工具包commons-httpclient-3.1.jar,依赖commons-logging-1.0.4.jar和commons-codec-1.3.jar。

package util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.URIException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.util.URIUtil;

/**
*
*
* <p>Title:HttpTookitEnhance</p>
* <p>Description: httpclient模拟http请求,解决返回内容乱码问题</p>
* <p>Copyright: Copyright (c) 2010</p>
* <p>Company: </p>
* @author libin
* @version 1.0.0
*/
public class HttpTookitEnhance
{

/**
* 执行一个HTTP GET请求,返回请求响应的HTML
*
* @param url                 请求的URL地址
* @param queryString 请求的查询参数,可以为null
* @param charset         字符集
* @param pretty            是否美化
* @return 返回请求响应的HTML
*/
public static String doGet ( String url, String queryString, String charset, boolean pretty )
{
StringBuffer response = new StringBuffer();
HttpClient client = new HttpClient();
HttpMethod method = new GetMethod(url);
try
{
if ( queryString != null && !queryString.equals("") )
//对get请求参数做了http请求默认编码,好像没有任何问题,汉字编码后,就成为%式样的字符串
method.setQueryString(URIUtil.encodeQuery(queryString));
client.executeMethod(method);
if ( method.getStatusCode() == HttpStatus.SC_OK )
{
BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), charset));
String line;
while ( ( line = reader.readLine() ) != null )
{
if ( pretty )
response.append(line).append(System.getProperty("line.separator"));
else
response.append(line);
}
reader.close();
}
}
catch ( URIException e )
{
e.printStackTrace();
}
catch ( IOException e )
{
e.printStackTrace();
}
catch ( Exception e )
{
e.printStackTrace();
}
finally
{
method.releaseConnection();
}
return response.toString();
}

/**
* 执行一个HTTP POST请求,返回请求响应的HTML
*
* @param url         请求的URL地址
* @param params    请求的查询参数,可以为null
* @param charset 字符集
* @param pretty    是否美化
* @return 返回请求响应的HTML
*/
public static String doPost ( String url, Map<String, String> params, String charset, boolean pretty )
{
StringBuffer response = new StringBuffer();
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(url);
method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset="+charset);
//设置Http Post数据
if ( params != null )
{
NameValuePair[] data = new NameValuePair[params.size()];
int i = 0;
for ( Map.Entry<String, String> entry : params.entrySet() )
{
NameValuePair p = new NameValuePair(entry.getKey(), entry.getValue());
data[i]=p;
i++;
}
method.setRequestBody(data);
}
try
{
client.executeMethod(method);
if ( method.getStatusCode() == HttpStatus.SC_OK )
{
BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), charset));
String line;
while ( ( line = reader.readLine() ) != null )
{
if ( pretty )
response.append(line).append(System.getProperty("line.separator"));
else
response.append(line);
}
reader.close();
}
}
catch ( URIException e )
{
e.printStackTrace();
}
catch ( IOException e )
{
e.printStackTrace();
}
catch ( Exception e )
{
e.printStackTrace();
}
finally
{
method.releaseConnection();
}
return response.toString();
}

public static void main ( String [] args )
{

Map<String, String> params = new HashMap<String,String>();
params.put("password", "123123");
params.put("nickname", "洋洋");
String y = doPost("http://127.0.0.1:8080/", params, "UTF-8", true);
System.out.println(y);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: