httpclient4.5 入门教程 1.1执行请求

Httpclient4.5详解之源码解析和使用一: 关键执行流程源码解读 前言 作为一个java后端开发,调用http协议的请求一直使用的httpclient,但是对他内部原理却一概不知,由于它使用了连接池来解决连接资源消耗所带来的问题,同时我们在使用时他也隐匿了连接池操作的很多细节,所以若是使用不当势必会带来很多隐藏的坑(诸如CLOSE_WAIT过多造成服务假死之类)所以最近有时间看了他内部源码,特此记录下来。 httpclient当前版本总览: httpc... 阅读详情
本文转载自http://blog.youkuaiyun.com/u011179993/article/details/47131773

第一章 :基础

1.1执行请求

HttpClient最基本的功能是执行HTTP方法,一个 HTTP 方法的执行包含一个或多个 HTTP 请求/HTTP 相应的交换,通常由 HttpClient的内部来处理。使用者被要求提供一个Request对象来执行,HttpClient就会把请求传送给目标服务器并返回一个相对应的response对象,如果执行不成功,将会抛出一个异常。

显然,HttpClient API 的主要切入点就是定义描述上述契约的HttpClient接口。

一个简单的请求执行事例:

  1. CloseableHttpClient httpclient = HttpClients.createDefault();  
  2. HttpGet httpget = new HttpGet(“http://localhost/”);  
  3. CloseableHttpResponse response = httpclient.execute(httpget);  
  4. try {  
  5.    <…>  
  6. } finally {  
  7.    response.close();  
  8. }  
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpget = new HttpGet("http://localhost/");
CloseableHttpResponse response = httpclient.execute(httpget);
try {
   <...>
} finally {
   response.close();
}

1.1.1. HTTP 请求(Request)

所有 HTTP 请求都有一个请求起始行,这个起始行由方法名,请求 URI 和 HTTP 协议版本组成。HttpClient很好地支持了HTTP/1.1规范中所有的HTTP方法:GET,HEAD, POST,PUT, DELETE, TRACE 和 OPTIONS。每个方法都有一个特别的类:HttpGet,HttpHead, HttpPost,HttpPut,HttpDelete,HttpTrace和HttpOptions。URI是统一资源标识符的缩写,用来标识与请求相符合的资源。HTTP 请求URI包含了一个协议名称,主机名,可选端口,资源路径,可选的参数,可选的片段。

  1. HttpGet httpget = new HttpGet(  
  2.      ”http://www.google.com/search?hl=en&q=httpclient&btnG=Google+Search&aq=f&oq=”);  
HttpGet httpget = new HttpGet(
     "http://www.google.com/search?hl=en&q=httpclient&btnG=Google+Search&aq=f&oq=");

HttpClient提供了URIBuilder工具类来简化创建、修改请求 URIs。

  1. URI uri = new URIBuilder()  
  2.           .setScheme(”http”)  
  3.           .setHost(”www.google.com”)  
  4.           .setPath(”/search”)  
  5.           .setParameter(”q”, “httpclient”)  
  6.           .setParameter(”btnG”, “Google Search”)  
  7.           .setParameter(”aq”, “f”)  
  8.           .setParameter(”oq”, “”)  
  9.           .build();  
  10. HttpGet httpget = new HttpGet(uri);  
  11. System.out.println(httpget.getURI());</span>  
URI uri = new URIBuilder()
          .setScheme("http")
          .setHost("www.google.com")
          .setPath("/search")
          .setParameter("q", "httpclient")
          .setParameter("btnG", "Google Search")
          .setParameter("aq", "f")
          .setParameter("oq", "")
          .build();
HttpGet httpget = new HttpGet(uri);
System.out.println(httpget.getURI());</span>
输出:
  1. http://www.google.com/search?q=httpclient&btnG=Google+Search&aq=f&oq=  
http://www.google.com/search?q=httpclient&btnG=Google+Search&aq=f&oq=


1.1.2.HTTP 响应(Response)

HTTP 相应是服务器接收并解析请求信息后返回给客户端的信息,它的起始行包含了一个协议版本,一个状态码和描述状态的短语。
  1. HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1  
  2.                              ,HttpStatus.SC_OK, ”OK”);  
  3. System.out.println(response.getProtocolVersion());  
  4. System.out.println(response.getStatusLine().getStatusCode());  
  5. System.out.println(response.getStatusLine().getReasonPhrase());  
  6. System.out.println(response.getStatusLine().toString());  
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1
                             ,HttpStatus.SC_OK, "OK");
System.out.println(response.getProtocolVersion());
System.out.println(response.getStatusLine().getStatusCode());
System.out.println(response.getStatusLine().getReasonPhrase());
System.out.println(response.getStatusLine().toString());

输出:
  1. HTTP/1.1  
  2. 200  
  3. OK  
  4. HTTP/1.1 200 OK  
HTTP/1.1
200
OK
HTTP/1.1 200 OK


1.1.3.处理报文首部(Headers)

一个HTTP报文包含了许多描述报文的首部,比如内容长度,内容类型等。HttpClient提供了一些方法来取出,添加,移除,枚举首部。

  1. HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK, “OK”);  
  2. response.addHeader(”Set-Cookie”,“c1=a; path=/; domain=localhost”);  
  3. response.addHeader(”Set-Cookie”,“c2=b; path=\”/\”, c3=c; domain=\”localhost\”“);  
  4. Header h1 = response.getFirstHeader(”Set-Cookie”);  
  5. System.out.println(h1);  
  6. Header h2 = response.getLastHeader(”Set-Cookie”);  
  7. System.out.println(h2);  
  8. Header[] hs = response.getHeaders(”Set-Cookie”);  
  9. System.out.println(hs.length);  
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK, "OK");
response.addHeader("Set-Cookie","c1=a; path=/; domain=localhost");
response.addHeader("Set-Cookie","c2=b; path=\"/\", c3=c; domain=\"localhost\"");
Header h1 = response.getFirstHeader("Set-Cookie");
System.out.println(h1);
Header h2 = response.getLastHeader("Set-Cookie");
System.out.println(h2);
Header[] hs = response.getHeaders("Set-Cookie");
System.out.println(hs.length);
输出:
Set-Cookie: c1=a; path=/; domain=localhost
Set-Cookie: c2=b; path=”/”, c3=c; domain=”localhost”
2


获得所有指定类型首部最有效的方式是使用HeaderIterator接口

  1. HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK, “OK”);  
  2. response.addHeader(”Set-Cookie”,“c1=a; path=/; domain=localhost”);  
  3. response.addHeader(”Set-Cookie”,“c2=b; path=\”/\”, c3=c; domain=\”localhost\”“);  
  4. HeaderIterator it = response.headerIterator(”Set-Cookie”);  
  5. while (it.hasNext()) {  
  6.      System.out.println(it.next());  
  7. }  
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK, "OK");
response.addHeader("Set-Cookie","c1=a; path=/; domain=localhost");
response.addHeader("Set-Cookie","c2=b; path=\"/\", c3=c; domain=\"localhost\"");
HeaderIterator it = response.headerIterator("Set-Cookie");
while (it.hasNext()) {
     System.out.println(it.next());
}
输出:

Set-Cookie: c1=a; path=/; domain=localhost

Set-Cookie: c2=b; path=”/”, c3=c; domain=”localhost”


HttpClient也提供了其他便利的方法吧HTTP报文转化为单个的HTTP元素。

  1. HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK, “OK”);  
  2. response.addHeader(”Set-Cookie”,“c1=a; path=/; domain=localhost”);  
  3. response.addHeader(”Set-Cookie”,“c2=b; path=\”/\”, c3=c; domain=\”localhost\”“);  
  4. HeaderElementIterator it = new BasicHeaderElementIterator(  
  5. response.headerIterator(”Set-Cookie”));  
  6. while (it.hasNext()) {  
  7.      HeaderElement elem = it.nextElement();  
  8.      System.out.println(elem.getName() + ” = ” + elem.getValue());  
  9.      NameValuePair[] params = elem.getParameters();  
  10.      for (int i = 0; i < params.length; i++) {  
  11.           System.out.println(” ” + params[i]);  
  12.      }  
  13. }  
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,HttpStatus.SC_OK, "OK");
response.addHeader("Set-Cookie","c1=a; path=/; domain=localhost");
response.addHeader("Set-Cookie","c2=b; path=\"/\", c3=c; domain=\"localhost\"");
HeaderElementIterator it = new BasicHeaderElementIterator(
response.headerIterator("Set-Cookie"));
while (it.hasNext()) {
     HeaderElement elem = it.nextElement();
     System.out.println(elem.getName() + " = " + elem.getValue());
     NameValuePair[] params = elem.getParameters();
     for (int i = 0; i < params.length; i++) {
          System.out.println(" " + params[i]);
     }
}

输出:
c1 = a
path=/
domain=localhost
c2 = b
path=/
c3 = c
domain=localhost


======================================总结区域(非原文)============================

1.对于HttpClient你可以把它简单理解成浏览器就好了。

2.HttpClient请求是必不可少的,所以构建请求很重要,要对HTTP报文有一定的了解。

3.响应不是必须的,因为HttpClient是客户端编程,只是为了方便测试使用。

4.学会处理首部很重要,会面有更加详细的内容。

5.对HTTP协议不是很了解的同学,推荐看《HTTP权威指南》这本书。


其他内容请查看目录贴点击打开链接


Apache HttpClient4使用教程 基于HttpClient 4.5.2 执行GET请求 CloseableHttpClient httpClient = HttpClients.custom() .build(); CloseableHttpResponse response = httpClient.execute(new HttpGet(&quot;https://www.baidu.com&quot;)); ... 阅读详情

相关推荐

Java使用HttpClient5实现发送HTTP请求

HttpClient5 是 Apache HttpComponents 项目中的一个重要组件,它是一个功能齐全且高度可定制的 HTTP 客户端库,专门用于发送 HTTP 请求、处理 HTTP 响应并支持各种 HTTP 协议特性。内置的连接池机制能提高并发处理性能,减少资源消耗。内置 Cookie 管理功能,能够自动处理服务端返回的 Cookie 并在后续请求中使用,模拟浏览器行为。HttpClient5 的设计高度模块化,用户可以根据需要对连接管理、重定向策略、请求重试策略、代理设置等进行灵活定制。

pan_junbiao的博客 2043

【HttpClient4.5中文教程】【第一章 :基础】1.1执行请求(一)

原文:http://blog.csdn.net/u011179993/article/details/47131773 第一章 :基础 1.1执行请求 HttpClient最基本的功能是执行HTTP方法,一个 HTTP 方法的执行包含一个或多个 HTTP 请求/HTTP 相应的交换,通常由 HttpClient的内部来处理。使用者被要求提供一个Request对象来

Ryan Z 的技术日志 671

HTTPClient 4.5:必备Jar包及源码解析

在当今的网络时代,HTTPClient作为一款广泛使用的网络通信客户端库,对于Web开发者而言可谓是不可或缺的工具。本章节将简要介绍HTTPClient的基础知识及其在应用开发中的重要性。HTTPClient是一个开源的Java HTTP客户端库,它提供了访问Web服务器的简易方式。通过它,开发者可以构建HTTP请求、发送请求并接收响应,这些操作都封装在易于理解和使用的API中。超文本传输协议(HTTP)是互联网上应用最为广泛的一种网络协议。

weixin_32445049的博客 929

【HttpClient】HttpClient4.5基础教程

一、前言 1、说明 HttpClient是一个目前最常用的用于模拟客户端发送http请求的工具,可用于接口自动化测试或者爬虫或者在项目中加入获取其他网站数据等; 支持目前所有的请求方式,如put,post,get,delete等; 2、maven依赖添加 maven依赖如下: &amp;amp;amp;lt;dependency&amp;amp;amp;gt; &amp;amp;amp;lt;groupId&amp;amp;amp;gt;org.apache.ht

df0128的专栏 1万+

httpClient4.5.1教程

httpClient4.5.1教程 httpClient4.5.1教程 httpClient4.5.1教程

httpclient4.5.4 开发文档

httpclient4.5.4 开发文档 超文本传输协议(HTTP)或许是最重要的互联网上使用的协议。Web服务、网络功能和网络计算的增长继续扩展HTTP协议的作用超出用户的Web浏览器、应用数量的增加,需要支持HTTP。 尽管net包提供基本功能,用于经由HTTP访问的资源,它不能提供充分的灵活性或功能所需的许多应用。HttpClient寻求填补这个空隙通过提供高效的、最新的、功能丰富的封装和实现与客户机侧HTTP的最新标准和建议。 设计用于扩展而提供坚固的支撑基座的HTTP协议,HttpClient感兴趣的任何人可构建HTTP-察觉的客户端应用诸如web浏览器、web服务客户端或系统,或利用扩展HTTP协议用于分布式通信。

HttpClient4.5.3添加Cookie和Header的User-Agent

HttpClient4.5.3可以通过一下方法设置Cookie和Header的User-Agent

ly6cyh的专栏 1万+

AIGC在游戏行业的应用:革新游戏开发与体验

AIGC(人工智能生成内容)技术正在深刻改变游戏行业,从开发到体验全面革新。在游戏开发中,AIGC可用于自动生成关卡、角色和剧情,提升开发效率;在资源制作中,通过AI生成场景、角色模型等,降低成本。

1668

HttpClient4.5实现http与https请求,解决之前方法过时问题

前言最近项目正在筹备上线,发现 HttpClient 中的很多类和方法都已经过时了,虽然并不影响功能的实现,但是看着确实让人捉急,所以,索性抽了点时间把它给改了。今天就来分享一下。。。之前的代码先看看之前的代码吧:以下是之前的过时代码(部分,完整代码在文章末会贴出git地址)private static void sslClient(HttpClient httpClient) { ...

朱哲的博客 2万+

MAX96712解串器MIPI CSI-2输出配置全解析:从Video Pipe映射到DPLL速率设置(以4路YUV422摄像头为例)

本文详细解析了MAX96712解串器在MIPI CSI-2输出配置中的关键步骤,包括Video Pipe映射、寄存器配置和DPLL速率设置。通过具体示例和代码片段,帮助开发者优化4路YUV422摄像头系统的图像传输稳定性和画质表现,适用于汽车电子和工业视觉应用。

weixin_30776273的博客 435

基于ROS2的实时视频流转换:image2rtsp在多路相机采集中的应用

本文详细介绍了如何在ROS2机器人系统中使用image2rtsp工具,将ROS2内部的相机图像话题实时转换为标准的RTSP视频流。重点阐述了其安装配置、核心参数调优,并提供了多路相机采集的实战方案,解决了机器人视觉数据跨平台、跨网络分发的难题,极大提升了视频流集成的部署效率。

weixin_29214559的博客 397

HttpClient4.5详解

1.HttpClient简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 Http

木槿落空樱桃忽而 % 1m 4344

FPGA人脸识别检测(先获取人脸图像以及灰度二值化)

由于图片有空洞等缺陷,所以后面要进行中值滤波、腐蚀、膨胀等算法处理,然后再对人脸进行框选,最后显示出来。最终的成像应该是下面这样的。(后面有时间再接着做哈哈哈)5、通过modelsim将操作后的图片数据写入gray_img.txt里面后,用matlab将txt转成图片。1、先用matlab将图片转换成txt数据,代码如下。读取图片的方式按照博客咸鱼里的方式来做,如下。2、FPGA读取txt数据。4、FPGA顶层模块及仿真。3、FPGA灰度二值化。

weixin_46312715的博客 2531

httpclient4.5 入门教程 1.1执行请求<二>

本文转载自http://blog.csdn.net/u011179993/article/details/47147909 更多HttpClient4.5中文教程请查看:点击打开链接=========================================================================================================== 1.

光与热的博客 387

LPDDR6与LPDDR5 ZQ Calibration技术探讨

LPDDR6与LPDDR5 ZQ Calibration技术探讨

zilan23的博客 1106

FineReport 动态列切换统计维度

目标: 自己选择统计维度进行数据的汇总统计数据集参数实现动态列。

Davina_yu的博客 1053

通过httpClient4.5.3发送POST请求,并添加请求头参数以及json格式请求参数

1、使用如下jar包或者添加maven依赖 &lt;dependency&gt; &lt;groupId&gt;org.apache.httpcomponents&lt;/groupId&gt; &lt;artifactId&gt;httpclient&lt;/artifactId&gt; &lt;version&gt;4.5.3&lt;/version&gt; &

lichuangcsdn的博客 2万+

面经-2023-禾赛-FPGA工程师

面经-2023-禾赛-FPGA工程师

w0shishabi的博客 2970

Java HttpClient爬虫请求

**本项目采用spring-boot构建, maven工程 添加依赖 pom文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> &l

Codeooo 博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

如何使用Apache HttpClient来执行GET、POST、PUT和DELETE请求

Apache HttpClient 是一个功能强大且灵活的库,用于在Java中处理HTTP请求。它支持多种HTTP方法,包括GET、POST、PUT和DELETE等。本教程将演示如何使用Apache HttpClient来执行GET、POST、PUT和DELETE请求。

疯一样的码农 1380

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

http请求 commons-httpclient(3.1)与httpclient(4.5.13) hutool(5.7.12)

一、commons-httpclient(3.1)(已经不在维护了) <!--commons-httpclient(已经不在维护了)--> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </d

tanzongbiao的专栏 4202

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

通过HttpClient4.5.3发送http get请求

1、添加jar或者maven依赖或者添加maven依赖 &lt;dependency&gt; &lt;groupId&gt;org.apache.httpcomponents&lt;/groupId&gt; &lt;artifactId&gt;httpclient&lt;/artifactId&gt; &lt;version&gt;4.5.3&lt;/version&gt;

lichuangcsdn的博客 1989

http请求封装JSONObject(基于httpclient4.5.10)

http请求封装JSONObject参数(基于httpclient4.5.10)导入Apache POI Maven jar包编写工具类 导入Apache POI Maven jar包 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <!-- SpringBoot 整...

Jian 1095

【HttpClient4.5中文教程】三.HttpClient执行基本请求

更多HttpClient4.5中文教程请查看:点击打开链接==================================HttpClient最基本的功能是执行HTTP方法,一次 HTTP 方法的执行包含一个或多个 HTTP 请求/响应的交互,通常由 HttpClient的内部来处理。使用者需要提供一个Request对象来执行HTTP请求,HttpClient就会把请求传送给目标服务器并返回一

要啥自行车 1万+

httpclient4.5.3 使用

我这里是使用maven来构建项目,用普通工程的请下载相关的包后加入buildpath 。 新建一个maven工程,这里我只是简单的写了两种请求 这里选择勾选建立一个简单工程 红色的地方可以根据需求选择,点击完成。 org.apache.httpcomponents httpclient 4.5.3 log4j

u012410349的博客 7675
上一篇: httpclient UrlEncodedFormEntity
下一篇: httpclient4.5 入门教程 1.1执行请求<二>
光与热
博客等级 码龄11年 55粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值