httpClient使用总结
前记
最近有个需求,需要根据商品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>
<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();
- }
- }
- }
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/
http://laohuang.iteye.com/blog/55613
httpClient使用总结的更多相关文章
- HttpClient的替代者 - RestTemplate
需要的包 ,除了Spring的基础包外还用到json的包,这里的数据传输使用json格式 客户端和服务端都用到一下的包 <!-- Spring --> <dependency> ...
- 关于微软HttpClient使用,避免踩坑
最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...
- 使用HttpClient的优解
新工作入职不满半周,目前仍然还在交接工作,适应环境当中,笔者不得不说看别人的源码实在是令人痛苦.所幸今天终于将大部分工作流畅地看了一遍,接下来就是熟悉框架技术的阶段了. 也正是在看源码的过程当中,有一 ...
- Java的异步HttpClient
上篇提到了高性能处理的关键是异步,而我们当中许多人依旧在使用同步模式的HttpClient访问第三方Web资源,我认为原因之一是:异步的HttpClient诞生较晚,许多人不知道:另外也可能是大多数W ...
- 揭秘Windows10 UWP中的httpclient接口[2]
阅读目录: 概述 如何选择 System.Net.Http Windows.Web.Http HTTP的常用功能 修改http头部 设置超时 使用身份验证凭据 使用客户端证书 cookie处理 概述 ...
- C#中HttpClient使用注意:预热与长连接
最近在测试一个第三方API,准备集成在我们的网站应用中.API的调用使用的是.NET中的HttpClient,由于这个API会在关键业务中用到,对调用API的整体响应速度有严格要求,所以对HttpCl ...
- HttpClient调用webApi时注意的小问题
HttpClient client = new HttpClient(); client.BaseAddress = new Uri(thisUrl); client.GetAsync("a ...
- HttpClient相关
HTTPClient的主页是http://jakarta.apache.org/commons/httpclient/,你可以在这里得到关于HttpClient更加详细的信息 HttpClient入门 ...
- Atitit.http httpclient实践java c# .net php attilax总结
Atitit.http httpclient实践java c# .net php attilax总结 1. Navtree>> net .http1 2. Httpclient理论1 2. ...
- 使用httpclient发送get或post请求
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...
随机推荐
- 436 Find Right Interval 寻找右区间
给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间 i 的终点,这可以称为 j 在 i 的“右侧”.对于任何区间,你需要存储的满足条件的区间 j 的最小索引,这意味着 ...
- laravel 学习
解决办法:没有开启PHP.ini的fileinfo扩展
- 简单工厂模式-Java篇
简单工厂模式就是考虑如何实例化对象的问题,就是说到底要实例化谁,将来会不会增加实例化对象,比如计算器类中增加开根元素,应该考虑用一个单独的类来创造实例的过程,这就是工厂.下面将利用计算器类举例,解释简 ...
- 锁 Lock、重入锁、写入锁
ReentrantLock 重入锁 类似于synchronize 区别与写法上,在需要进行同步的代码部分加上锁定,但不要忘记最后一定要释放锁定, 不然会造成锁永远无法释放,其他线程永远进不来的结果.e ...
- Java编程思想总结笔记Chapter 5
初始化和清理是涉及安全的两个问题.本章简单的介绍“垃圾回收器”及初始化知识. 第五章 初始化与清理 目录:5.1 用构造器确保初始化5.2 方法重载5.3 默认构造器5.4 this关键字5.5 清 ...
- ubuntu命令行使用ftp客户端
转载 本篇文章主要介绍在Ubuntu 8.10下如何使用功能强大的FTP客户端软件NcFTP. Ubuntu的源里为我们提供了FTP客户端软件NcFTP,可这款工具对新手来说不是很方便.本文介绍的是一 ...
- ubuntu设置root账号密码
Ubuntu Linux有一个与众不同的特点,那就是初次使用时,你无法作为root来登录系统,为什么会这样?这就要从系统的安装说起.对于其他Linux系统来 说,一般在安装过程就设定root密码,这样 ...
- 博客之旅 gogogo!
听说写博客的人都很牛~ 上班一年多了,想记录点什么,so,就写博客吧,整理一些技术点与工作生活心得 欢迎各位道友交流学习 :)
- org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
---恢复内容开始--- /* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache ...
- 04XML CSS
XML CSS 1. XML CSS <?xml-stylesheet href ="样式表的URI" type= "text/css" ?> ...