httpclientjar下载去哪里?分享几个靠谱的官方获取地址。

吉云

今天跟大家唠唠我最近鼓捣的 HttpClient jar 包那点事儿。

这玩意儿,一开始上手有点懵。需求是这样的,我需要用 Java 写个小工具,得能发送 HTTP 请求,简单来说就是个“网络搬运工”。之前用过一些其他的库,但总感觉差点意思,要么太重,要么配置太麻烦。后来一哥们儿推荐我用 HttpClient,说这玩意儿挺灵活,用起来也顺手。

得,那就开始呗。

httpclientjar下载去哪里?分享几个靠谱的官方获取地址。

第一步,当然是找 HttpClient 的 jar 包。我直接去 Apache 的官网(反正搜“HttpClient download”出来的第一个一般就是),吭哧吭哧下一个最新版本的。这玩意儿有好几个 jar 包,httpclient、httpcore 啥的,一股脑全下,一股脑全扔到我的项目 lib 目录下。当时也没细看,想着“宁可多下,不可少下”,先把环境搭起来再说。

下包,接着就是在项目里引入这些 jar 包。我是用的 IDEA,直接在 Project Structure 里面,Modules -> Dependencies,然后点那个加号,选择“JARs or directories...”,把刚才下载的那堆 jar 包一股脑全选进去。

万事俱备,开始写代码!

我先写个最简单的 GET 请求。HttpClient 嘛得先创建一个 HttpClient 对象。然后创建一个 HttpGet 对象,把 URL 塞进去。用 HttpClient 执行这个 HttpGet,拿到一个 HttpResponse 对象。从 HttpResponse 里把内容读出来。

java

// 创建 HttpClient

httpclientjar下载去哪里?分享几个靠谱的官方获取地址。

HttpClient httpClient = *();

// 创建 HttpGet 请求

HttpGet httpGet = new HttpGet("*");

// 执行请求

HttpResponse response = *(httpGet);

// 获取响应状态码

httpclientjar下载去哪里?分享几个靠谱的官方获取地址。

int statusCode = *().getStatusCode();

// 获取响应内容

HttpEntity entity = *();

String content = *(entity, "UTF-8");

// 打印结果

*("Status Code: " + statusCode);

httpclientjar下载去哪里?分享几个靠谱的官方获取地址。

*("Content: " + content);

这段代码跑起来,果然能拿到网页的内容,感觉还不错。但是,问题也来。

我发现有些网站,直接用上面的代码会报错,说是什么编码不对。后来查一下,原来是有些网站的响应头里没指定编码,HttpClient 默认用 ISO-8859-1 来解码,这肯定不行。

于是我就改下代码,强制指定 UTF-8 编码:

java

httpclientjar下载去哪里?分享几个靠谱的官方获取地址。

String content = *(entity, "UTF-8");

这样改之后,大部分网站都能正常获取内容。但是,还是有些网站不行,报的错也不一样,五花八门。

后来我发现 HttpClient 还有一些高级用法,可以设置请求头、超时时间、代理等等。我就开始一个个试。

比如,设置 User-Agent,模拟浏览器:

java

httpclientjar下载去哪里?分享几个靠谱的官方获取地址。

*("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");

设置超时时间,防止程序一直卡住:

java

RequestConfig requestConfig = *()

.setConnectTimeout(5000) // 设置连接超时时间

httpclientjar下载去哪里?分享几个靠谱的官方获取地址。

.setSocketTimeout(5000) // 设置读取超时时间

.build();

*(requestConfig);

如果遇到需要 POST 请求的,HttpClient 也有相应的 API。创建一个 HttpPost 对象,然后把参数塞进去:

java

httpclientjar下载去哪里?分享几个靠谱的官方获取地址。

HttpPost httpPost = new HttpPost("*/post");

List params = new ArrayList

*(new BasicNameValuePair("param1", "value1"));

*(new BasicNameValuePair("param2", "value2"));

*(new UrlEncodedFormEntity(params, "UTF-8"));

HttpResponse response = *(httpPost);

httpclientjar下载去哪里?分享几个靠谱的官方获取地址。

捣鼓一段时间,我对 HttpClient 的用法也算是有个基本的解。虽然中间遇到不少坑,但也算是都填平。HttpClient 还是挺好用的,功能强大,配置灵活。

不过我也发现 HttpClient 还是有些地方不太方便。比如,每次都要自己处理异常,自己关闭连接。如果能封装一下,用起来就更舒服。

我下一步的计划是,把 HttpClient 封装成一个工具类,提供更简洁的 API。这样,以后再用 HTTP 请求,就不用写那么多重复的代码。

这回分享就到这儿,希望对大家有所帮助。如果大家有什么 HttpClient 的使用心得,也欢迎在评论区分享。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]