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

java发送http的get、post请求

2016-03-31 21:50 603 查看


import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.HttpMethod;

import org.apache.commons.httpclient.HttpStatus;

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.params.HttpMethodParams;

import org.apache.commons.httpclient.util.URIUtil;

import org.apache.commons.lang.StringUtils;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Map;

/**

* HTTP工具箱

*

* @author leizhimin 2009-6-19 16:36:18

*/

public final class HttpTookit {

private static Log log = LogFactory.getLog(HttpTookit.class);

/**

* 执行一个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 (StringUtils.isNotBlank(queryString))

//对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) {

log.error("执行HTTP Get请求时,编码查询字符串“" + queryString + "”发生异常!", e);

} catch (IOException e) {

log.error("执行HTTP Get请求" + url + "时,发生异常!", e);

} 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();

HttpMethod method = new PostMethod(url);

//设置Http Post数据

if (params != null) {

HttpMethodParams p = new HttpMethodParams();

for (Map.Entry<String, String> entry : params.entrySet()) {

p.setParameter(entry.getKey(), entry.getValue());

}

method.setParams(p);

}

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 (IOException e) {

log.error("执行HTTP Post请求" + url + "时,发生异常!", e);

} finally {

method.releaseConnection();

}

return response.toString();

}

public static void main(String[] args) {

String y = doGet("http://video.sina.com.cn/life/tips.html", null, "GBK", true);

System.out.println(y);

}

}

其实,这里的美化加入系统平台无关的换行符,可以任何平台上正确显示换行。

另外发现,通过JDK自带类库实现的请求,往往在请求一些url时,无法获取到请求结果。但此工具总能保证只要你的浏览器能打开,它总能忠实的将响应的内容反馈回来。

另外,将查看Java平台环境的代码给出来,很常用!

public static void main(String[] args) {

Properties p = System.getProperties();

for (Map.Entry<Object, Object> entry : p.entrySet()) {

System.out.println(entry.getKey() + " = " + entry.getValue());

}

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