前言

  最近这段时间在学习爬虫方面的知识,接触了几个优秀的爬虫框架,也爬取了一些自己喜欢网站的信息。通过官网学习HttpClient的过程中,希望通过写此博客来巩固自己的学习,也为有需要的人提供学习帮助。系列文章内容主要为HttpClient官方文档的翻译以及个人理解。

Part1-HttpClient快速入门案例:本节官网文档  

下载安装

  1. 不使用Maven的情况:jar包下载地址
  2. 使用Maven的情况:在pom.xml中添加以下依赖
        <dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.4</version>
</dependency>

快速入门案例

/**
*
* TODO 使用HttpClient原生API演示HTTP GET和POST请求的执行。
*
* @author 寇爽
* @date 2017年12月17日
* @version 1.8
*/
public class QuickStart { public static void main(String[] args) throws Exception {
// 创建带有默认配置的CloseableHttpClient实例。
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
// 创建一个HttpGet对象实例(如果是post请求则创建HttpPost对象实例)
HttpGet httpGet = new HttpGet("http://httpbin.org/get");
// 使用默认上下文执行HTTP请求。
CloseableHttpResponse response1 = httpclient.execute(httpGet);
// 底层的HTTP连接仍然由响应对象持有
// 为了确保对系统资源的正确处理,用户必须调用CloseableHttpResponse#close()。
// 注意,如果响应内容未被完全使用,则底层连接不能被安全重用,并将被连接管理器关闭和丢弃。
try {
// 输出该响应的状态
System.out.println(response1.getStatusLine());
// 获得该响应的消息实体,如果有的话。实体是通过调用setEntity(HttpEntity entity)来提供的。
HttpEntity entity1 = response1.getEntity();
// 对响应主体做一些有用的事情并确保它被完全消耗掉
// EntityUtils工具类提供了很多静态的方法用来处理HttpEntity对象实例
EntityUtils.consume(entity1);
//释放资源
} finally {
response1.close();
}
// 创建一个HttpPost对象实例,对应Post请求
HttpPost httpPost = new HttpPost("http://httpbin.org/post");
//创建ArrayList列表
//NameValuePair接口定义了用作 HTTP 消息元素的名称/值对参数。
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
//BasicNameValuePair类为NameValuePair接口的基本实现类
//这里调用了BasicNameValuePair类的构造方法
nvps.add(new BasicNameValuePair("username", "vip"));
nvps.add(new BasicNameValuePair("password", "secret"));
//调用setEntity方法将实体与此请求关联。
//UrlEncodedFormEntity(nvps):通过参数列表创建具有默认编码方式的UrlEncodedFormEntity对象实例
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
//执行http请求
CloseableHttpResponse response2 = httpclient.execute(httpPost); try {
System.out.println(response2.getStatusLine());
HttpEntity entity2 = response2.getEntity();
// 对响应主体做一些有用的事情并确保它被完全消耗掉
EntityUtils.consume(entity2);
//释放资源
} finally {
response2.close();
}
} finally {
httpclient.close();
}
}
}

改版(同样的请求可以使用更简单、但不那么灵活的API来执行。)

//流畅的 API 使用户不必手动处理系统资源的分配,
//但是在某些情况下, 需要在内存中缓冲响应内容
Request.Get("http://targethost/homepage")
.execute().returnContent();
Request.Post("http://targethost/login")
.bodyForm(Form.form().add("username", "vip").add("password", "secret").build())
.execute().returnContent();

HttpClient例子

官网提供的例子:展示了一些更复杂的行为。

HttpClient教程

官网提供的教程:给出了 HttpClient API 的详细的介绍, 这是按照 (有时不是很直观) HTTP 规范/标准编写的。副本也随发行版一起发送,另外还提供了 PDF 版本

HttpClient Primer

官网提供的解释HttpClient使用范围的文档:本文的目的是为那些突然需要或想要实现一个自动化应用程序的人,这些应用程序通常是用浏览器完成的,但是却缺少后台来理解他们实际需要做什么。它提供了实现与web站点交互所需的步骤的指导,该程序设计用于与浏览器一起使用。

转载请注明转载地址。。。

Part1-HttpClient快速入门案例的更多相关文章

  1. Elasticsearch快速入门案例

    写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...

  2. 【Flask-RESTPlus系列】Part1:快速入门

    0x00 内容概览 Flask-RESTPlus安装 快速入门 初始化 一个最简单的API示例 资源路由 端点 参数解析 数据格式化 顺序保留 完整例子 0x01 Flask-RESTPlus安装 1 ...

  3. Elasticsearch学习之快速入门案例

    1. document数据格式 面向文档的搜索分析引擎 (1)应用系统的数据结构都是面向对象的,复杂的(2)对象数据存储到数据库中,只能拆解开来,变为扁平的多张表,每次查询的时候还得还原回对象格式,相 ...

  4. javaWeb el表达式和jstl快速入门案例

    <%@page import="de.bvb.domain.Person"%> <%@page import="de.bvb.domain.Addres ...

  5. SpringBoot整合ActiveMQ快速入门

    Spring Boot 具有如下特性: 为基于 Spring 的开发提供更快的入门体验 开箱即用,没有代码生成,也无需 XML 配置.同时也可以修改默认值来满足特定的需求. 提供了一些大型项目中常见的 ...

  6. SpringMVC总结一:快速入门

    MVC: MVC是一种架构模型,本身没有什么功能,只是让我们的项目结构更加合理,流程控制更加清晰,一般包含三个组件: ​ **Model(模型)**:数据模型,用于提供要展示的数据.一般包含数据和行为 ...

  7. Smarty快速入门

    1.Smarty是用纯php语言写的类 2.功能是实现前后端分离 3.Smarty简洁高效 4.快速入门案例 1.下载 smarty源码 https://www.smarty.net/ 2.搭建PHP ...

  8. c3p0连接池快速入门

    为什么要使用连接池,这些基本也不用说那么多 以下为快速入门案例 包目录结构 配置文件c3p0-config.xml <c3p0-config> <!-- 默认配置,如果没有指定自己的 ...

  9. 02_Spring控制反转案例快速入门

    Spring控制反转案例快速入门 1.下载Spring最新开发包 http://www.springsource.org/download/community 下载spring3.2 的开发包 目录结 ...

随机推荐

  1. 硬盘引导扇区、多分区图、不通硬盘的LINUX逻辑分区数量

    主要启动记录区(Master Boot Record,MBR):可以安装开机管理程序的地方,有446byte 分割表(Paritition table):记录整块硬盘分割的状态,有64bytes 下面 ...

  2. 查询MySQL某字段相同值得重复数据

    1.先查询重复的id: SELECT book_id,COUNT(*) AS COUNT FROM xs_book_source WHERE site_id=5 GROUP BY book_id HA ...

  3. dpr dproj 扩展名区别,dprdproj

    这段时间用xe6,看了下目录下生成的一些文件,因为隐藏了扩展名,看到两个名字一样的文件,右键属性看了下,同名但扩展名不同,百度了下区别,没有找到答案,问群里的朋友才知道区别,特此记录下来: dpr:D ...

  4. wpf DataGrid加载行号

    <DataGrid Name="tkdg" HorizontalContentAlignment="Center" AutoGenerateColumns ...

  5. hash 默认使用equal进行元素比较 防止元素重复

    hash 默认使用equal进行元素比较 防止元素重复

  6. CentOS 磁盘阵列(raid10)

    1.通过mdadm命令进行磁盘阵列部署 mdadm是multiple devices admin的简称,它是Linux下的一款标准的软件 RAID 管理工具 如果没有mdadm命令,通过yum安装一下 ...

  7. CodeForces.158A Next Round (水模拟)

    CodeForces.158A Next Round (水模拟) 题意分析 校赛水题的英文版,坑点就是要求为正数. 代码总览 #include <iostream> #include &l ...

  8. HDU.3342 Legal or Not (拓扑排序 TopSort)

    HDU.3342 Legal or Not (拓扑排序 TopSort) 题意分析 裸的拓扑排序 根据是否成环来判断是否合法 详解请移步 算法学习 拓扑排序(TopSort) 代码总览 #includ ...

  9. javascript forEach无法break,使用every代替

    every的入口参数是一个返回bool值的函数,在需要break的地方return false,其他均return true,即可达到和break相同的效果 function find(arr2, e ...

  10. bzoj1968: [Ahoi2005]COMMON 约数研究(数论)

    计算每一个数的贡献就好了..O(N) n/i只有2*sqrtn个取值于是可以优化到O(sqrtn) #include<bits/stdc++.h> #define ll long long ...