Part1-HttpClient快速入门案例
前言
最近这段时间在学习爬虫方面的知识,接触了几个优秀的爬虫框架,也爬取了一些自己喜欢网站的信息。通过官网学习HttpClient的过程中,希望通过写此博客来巩固自己的学习,也为有需要的人提供学习帮助。系列文章内容主要为HttpClient官方文档的翻译以及个人理解。
Part1-HttpClient快速入门案例:本节官网文档
下载安装
- 不使用Maven的情况:jar包下载地址
- 使用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快速入门案例的更多相关文章
- Elasticsearch快速入门案例
写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...
- 【Flask-RESTPlus系列】Part1:快速入门
0x00 内容概览 Flask-RESTPlus安装 快速入门 初始化 一个最简单的API示例 资源路由 端点 参数解析 数据格式化 顺序保留 完整例子 0x01 Flask-RESTPlus安装 1 ...
- Elasticsearch学习之快速入门案例
1. document数据格式 面向文档的搜索分析引擎 (1)应用系统的数据结构都是面向对象的,复杂的(2)对象数据存储到数据库中,只能拆解开来,变为扁平的多张表,每次查询的时候还得还原回对象格式,相 ...
- javaWeb el表达式和jstl快速入门案例
<%@page import="de.bvb.domain.Person"%> <%@page import="de.bvb.domain.Addres ...
- SpringBoot整合ActiveMQ快速入门
Spring Boot 具有如下特性: 为基于 Spring 的开发提供更快的入门体验 开箱即用,没有代码生成,也无需 XML 配置.同时也可以修改默认值来满足特定的需求. 提供了一些大型项目中常见的 ...
- SpringMVC总结一:快速入门
MVC: MVC是一种架构模型,本身没有什么功能,只是让我们的项目结构更加合理,流程控制更加清晰,一般包含三个组件: **Model(模型)**:数据模型,用于提供要展示的数据.一般包含数据和行为 ...
- Smarty快速入门
1.Smarty是用纯php语言写的类 2.功能是实现前后端分离 3.Smarty简洁高效 4.快速入门案例 1.下载 smarty源码 https://www.smarty.net/ 2.搭建PHP ...
- c3p0连接池快速入门
为什么要使用连接池,这些基本也不用说那么多 以下为快速入门案例 包目录结构 配置文件c3p0-config.xml <c3p0-config> <!-- 默认配置,如果没有指定自己的 ...
- 02_Spring控制反转案例快速入门
Spring控制反转案例快速入门 1.下载Spring最新开发包 http://www.springsource.org/download/community 下载spring3.2 的开发包 目录结 ...
随机推荐
- 优化mysql的内存
Mysql占用CPU过高的时候,该从哪些方面下手进行优化? 占用CPU过高,可以做如下考虑:1)一般来讲,排除高并发的因素,还是要找到导致你CPU过高的哪几条在执行的SQL,show processl ...
- 如何设计好的RESTful API之安全性
保证RESTful API的安全性,主要包括三大方面: a) 对客户端做身份认证 b) 对敏感的数据做加密,并且防止篡改 c) 身份认证之后的授权 1.对客户端做身份认证,有几种常见的做法: 1)在请 ...
- 【bzoj2929】[Poi1999]洞穴攀行 网络流最大流
题目描述 洞穴学者在Byte Mountain的Grate Cave里组织了一次训练.训练中,每一位洞穴学者要从最高的一个室到达最底下的一个室.他们只能向下走.一条路上每一个连续的室都要比它的前一个低 ...
- 【bzoj1231】[Usaco2008 Nov]mixup2 混乱的奶牛 状态压缩dp
题目描述 混乱的奶牛[Don Piele, 2007]Farmer John的N(4 <= N <= 16)头奶牛中的每一头都有一个唯一的编号S_i (1 <= S_i <= ...
- Codeforces Gym 101142 C. CodeCoder vs TopForces(思维+图论)
题意: 每个人有两个积分CC和TF 第i个人能战胜第j个人的条件满足下面两个条件中的一个即可 1.CCi > CCj 或 TFi > TFj 2.i能战胜k,k能战胜j. 题解: 先按CC ...
- 转:浅谈Spectral Clustering 谱聚类
浅谈Spectral Clustering Spectral Clustering,中文通常称为“谱聚类”.由于使用的矩阵的细微差别,谱聚类实际上可以说是一“类”算法. Spectral Cluste ...
- [洛谷P4345][SHOI2015]超能粒子炮·改
题目大意:给你$n,k$,求:$$\sum\limits_{i=0}^k\binom n i\pmod{2333}$$题解:令$p=2333,f(n,k)\equiv\sum\limits_{i=0} ...
- ContestHunter暑假欢乐赛 SRM 08
rating再次跳水www A题贴HR题解!HR智商流选手太强啦!CYC也好强%%%发现了len>10大概率是Y B题 dp+bit优化,据LLQ大爷说splay也可以优化,都好强啊.. C题跑 ...
- 【BZOJ 4455】 [Zjoi2016]小星星 容斥计数
dalao教导我们,看到计数想容斥……卡常策略:枚举顺序.除去无效状态.(树结构) #include <cstdio> #include <cstring> #include ...
- 在Linux中新增与删除用户可以使用命令:Useradd
在Linux中新增与删除用户可以使用命令:Useradd 我们先使用man命令理解一下Useradd的用法 新增与删除用户操作需要先获取高级用户权限 输入命令:sudo -i 确定后输入高级用户密码 ...