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

httpClient使用总结

2013-12-15 19:16 441 查看
前记

最近有个需求,需要根据商品id获取商品详情: 首先想到的是在浏览器里输入url按回车就可以了;或者在linux中使用curl+url来发起一个http请求; 但如果是要在java程序中发出http请求,该如何实现呢?

一. httpClient初认识

虽然JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。

HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包。

二. httpClient使用

1. 引入maven依赖

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcomponents-client</artifactId>
<version>4.3</version>
</dependency>


2. GET方法代码框架



import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
public class GetSample{
public static void main(String[] args) {
//step1: 构造HttpClient的实例,类似于打开浏览器
HttpClient httpClient = new HttpClient();
//step2: 创建GET方法的实例,类似于在浏览器地址栏输入url
GetMethod getMethod = new GetMethod("http://www.ibm.com");
// 使用系统提供的默认的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
new DefaultHttpMethodRetryHandler());
try {
//step3: 执行getMethod 类似于点击enter,让浏览器发出请求
int statusCode = httpClient.executeMethod(getMethod);
if (statusCode != HttpStatus.SC_OK) {
System.err.println("Method failed: "
+ getMethod.getStatusLine());
}
//step4: 读取内容,浏览器返回结果
byte[] responseBody = getMethod.getResponseBody();
//处理内容
System.out.println(new String(responseBody));
} catch (HttpException e) {
//发生致命的异常,可能是协议不对或者返回的内容有问题
System.out.println("Please check your provided http address!");
e.printStackTrace();
} catch (IOException e) {
//发生网络异常
e.printStackTrace();
} finally {
//释放连接 (一定要记住)
getMethod.releaseConnection();
}
}
}


遇到的异常

org.apache.commons.httpclient.ProtocolException:The server x.x.x.x failed to respond with a valid HTTP response

java.net.SocketException:Connection reset

java.lang.IllegalStateException:Connection is not open

java.io.IOException: Stream closed

java.net包里定义的异常摘录

BindException:试图将套接字绑定到本地地址和端口时发生错误的情况下,抛出此异常。

例如,当web应用已经启动,8080端口已经占用,再打算启动时会报该异常

ConnectException:试图将套接字连接到远程地址和端口时发生错误的情况下,抛出此异常。

远程地址和端口而上一个异常是本地地址和端口

HttpRetryException:抛出此异常指示 HTTP 请求需要重试,但由于启用了流模式而无法自动重试

ProtocolException:抛出此异常指示在底层协议中存在错误,如 TCP 错误

SocketException:抛出此异常指示在底层协议中存在错误,如 TCP 错误

SocketTimeoutException:如果在读取或接受套接字时发生超时,则抛出此异常

MalformedURLException:抛出这一异常指示出现了错误的 URL。

参考资料

官方文档:http://hc.apache.org/httpcomponents-client-4.2.x/index.html

http://www.ibm.com/developerworks/cn/opensource/os-httpclient/
/article/7484774.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: