HTTP协议时Internet上使用的很多也很重要的一个协议,越来越多的java应用程序需要通过HTTP协议来访问网络资源。
HTTPClient提供的主要功能:
1、实现了所有HTTP的方法(GET、POST、等PUT、HEAD);
2、支持自动转向;
3、支持HTTPS协议;
4、支持代理服务器等。
使用HttpClient需要以下6个步骤:
- 创建HttpClient的实例
- 创建某种连接方法的实例,GetMethod/PostMethod。在 GetMethod/PostMethod的构造函数中传入待连接的地址
- 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例
- 读response
- 释放连接。无论执行方法是否成功,都必须释放连接
- 对得到后的内容进行处理
HTTP GET方法应用:
应用一:
String url = "";
//构造HttpClient实例
HttpClient httpClient = new HttpClient();
//创建Get方法实例
GetMethod getMethod = new GetMethod(url);
//使用系统提供的默认的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler( ));
try{
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode == HttpStatus.SC_OK) {
//方法一:
byte[] respByte = getMethod.getResponseBody();
logger.info("返回信息:" + new String(respByte));
//方法二:
String respStr = getMethod.getResponseBodyAsString();
logger.info("返回信息:" + respStr);
}
logger.error("Method failed: "+ getMethod.getStatusLine());
}catch(HttpException e){
logger.error("发生致命的异常,可能是协议不对或者返回的内容有问题",e);
}catch(IOException e){
logger.error("网络异常",e);
}finally{
//释放连接
getMethod.releaseConnection();
}
应用二:
public String getRequest(String url, String requestStr) {
logger.debug("the getRest'params : url = " + "http://" + url + "?" + requestStr);
String respStr = null;
try {
// 定义HttpClient
DefaultHttpClient client = new DefaultHttpClient();
// 实例化HTTP方法
HttpGet request = new HttpGet();
url = url + "?" + requestStr;
url = URLEncoder.encode(url, "UTF-8");
request.setURI(new URI("http://" + url));
HttpResponse response = client.execute(request);
logger.debug("response status : " + response.getStatusLine().getStatusCode());
/**请求发送成功,并得到响应**/
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
/**读取服务器返回过来的数据**/
respStr = EntityUtils.toString(response.getEntity());
} else {
logger.error("get request fail:" + url);
}
}catch(Exception e){
logger.error("get request fail:" + url, e);
}
return respStr;
}
HTTP POST方法应用:
POST方法用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列(Request-Line)中请求URI所指定资源的附加新子项。
应用一:
String url = "";
String requestStr = "";
//创建HttpClient实例
HttpClient httpClient = new HttpClient();
//创建Post方法实例
PostMethod postMethod = new PostMethod(url);
//******方法一:创建请求实体,发送请求start*************
byte[] b = requestStr.getBytes();
InputStream is = new ByteArrayInputStream(b, 0, b.length);
RequestEntity re = new InputStreamRequestEntity(is, b.length, "text/xml; charset=UTF-8");//GBK
//设置请求头
postMethod.addRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
//设置请求体
postMethod.setRequestEntity(re);
//******创建请求实体,发送请求end*************
//******方法二:创建请求体,发送请求start*************
// 构造名称值对节点类对象
NameValuePair[] data = {
new NameValuePair("id", "yourUserName"),
new NameValuePair("passwd", "yourPwd"