Http Client 源码分析
/**
* 此接口仅代表HTTP请求执行的最基本约定。
* 它对请求执行过程没有任何限制或特定的细节,并将状态管理、身份验证和重定向处理的细节留给单个实现。
*/
public interface HttpClient {
HttpResponse execute(HttpUriRequest request);
} /**
* 用于提供创建{@link CloseableHttpClient}实例工厂方法.
*/
public class HttpClients {
public static CloseableHttpClient createDefault() {
return HttpClientBuilder.create().build();
}
} /**
* HTTP消息 包括从客户机到服务器的请求和从服务器到客户机的响应。
* HTTP-message = Request | Response ; HTTP/1.1 messages
*
* {@link HttpRequest} and {@link HttpResponse} 接口继承{@link HttpMessage }
*/
public interface HttpMessage {
} /**
* 从客户机到服务器的请求消息包括,
* 在该消息的第一行中,要应用于该资源的方法、资源的标识符以及正在使用的协议版本。
* method uri http/1.1
*/
public interface HttpRequest extends HttpMessage {
RequestLine getRequestLine(); // 获取请求行
} /**
* 在接收和解释请求消息后,服务器用HTTP响应消息响应。
* 设置/获取 状态行、状态码、原因短语、实体、locale
*/
public interface HttpResponse extends HttpMessage {
} /**
* Extended version of the {@link HttpRequest} interface that provides convenience methods to access request properties such as request URI and method type.
* {@link HttpRequest}接口的扩展版本,提供访问请求属性(如请求URI和方法类型)的方便方法。
*/
public interface HttpUriRequest extends HttpRequest {
String getMethod();
URI getURI();
void abort() ; // 中止请求的执行.
boolean isAborted();
} /**
* {@link HttpUriRequest}的基本实现.
*/
public abstract class HttpRequestBase extends AbstractExecutionAwareRequest implements HttpUriRequest, Configurable {
private ProtocolVersion version;
private URI uri;
private RequestConfig config;
} /**
* {@link HttpClient}的基本实现,也实现{@link Closeable}。
*/
@Contract(threading = ThreadingBehavior.SAFE)
public abstract class CloseableHttpClient implements HttpClient, Closeable {
// 只有多个重载的execute()方法、用于执行请求、
// 使用默认上下文执行请求,并使用给定的响应处理程序处理响应。 } /**
* {@code Closeable}是可以关闭的数据源或目标.
* 调用close方法释放对象所持有的资源(如打开的文件).
*/
public interface Closeable extends AutoCloseable {
} /**
* HTTP GET method.
* GET方法意味着检索请求URI标识的任何信息(以实体的形式)。
* 通过分析给定的字符串创建URI。
*/
public class HttpGet extends HttpRequestBase { } /**
* HTTP POST method.
* POST方法用于请求源服务器接受请求中包含的实体作为请求行中请求URI标识的资源的新下属。
*/
public class HttpPost extends HttpEntityEnclosingRequestBase { }
Http Client 源码分析的更多相关文章
- 【原】Spark中Client源码分析(二)
继续前一篇的内容.前一篇内容为: Spark中Client源码分析(一)http://www.cnblogs.com/yourarebest/p/5313006.html DriverClient中的 ...
- 【原】Spark中Client源码分析(一)
在Spark Standalone中我们所谓的Client,它的任务其实是由AppClient和DriverClient共同完成的.AppClient是一个允许app(Client)和Spark集群通 ...
- Thrift笔记(四)--Thrift client源码分析
thrift文件 namespace java com.gxf.demo namespace py tutorial typedef i32 int // We can use typedef to ...
- Spring Cloud Netflix Eureka client源码分析
1.client端 EurekaClient提供三个功能: EurekaClient API contracts are:* - provide the ability to get Instance ...
- Docker源码分析(二):Docker Client创建与命令执行
1. 前言 如今,Docker作为业界领先的轻量级虚拟化容器管理引擎,给全球开发者提供了一种新颖.便捷的软件集成测试与部署之道.在团队开发软件时,Docker可以提供可复用的运行环境.灵活的资源配置. ...
- hadoop的RPC机制 -源码分析
这些天一直奔波于长沙和武汉之间,忙着腾讯的笔试.面试,以至于对hadoop RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上 ...
- Hadoop的RPC机制源码分析
分析对象: hadoop版本:hadoop 0.20.203.0 必备技术点: 1. 动态代理(参考 :http://www.cnblogs.com/sh425/p/6893662.html )2. ...
- elasticsearch源码分析之search模块(client端)
elasticsearch源码分析之search模块(client端) 注意,我这里所说的都是通过rest api来做的搜索,所以对于接收到请求的节点,我姑且将之称之为client端,其主要的功能我们 ...
- Eureka 源码分析之 Eureka Client
文章首发于微信公众号<程序员果果> 地址:https://mp.weixin.qq.com/s/47TUd96NMz67_PCDyvyInQ 简介 Eureka是一种基于REST(Repr ...
随机推荐
- namespace/symbol/:keyword/::keyword in Clojure
此文已由作者张佃鹏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.关键字(:keyword/::keyword): 最近在学习使用clojure.spec(验证数据的 ...
- JDK Linux下安装
下载jdk-6u45-linux-x64.bin到/root目录下执行./jdk-6u45-linux-x64.bin 会在/root目录下生成 jdk1.6.0_45 文件 之后配置环境变量 编辑/ ...
- 「BZOJ 1297」「SCOI 2009」迷路「矩阵乘法」
题意 边权\(w \in [1, 9]\)的\(n\)个结点的有向图,图上从\(1\)到\(n\)长度为\(d\)的路径计数,\(n \leq 10\). 题解 如果边权为\(1\)很经典,设\(f[ ...
- HashMap vs Hashtable
一.散列 1. HashMap 1) hashmap的数据结构 Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“),如下图示: 当我们往hashmap中put元素的时候,先根据key ...
- Java基础之对包,类,方法,变量理解(灵感)
包,类,方法,变量 灵感乍现 感觉就如电脑上的各个大小文档一般,只不过名称不同,用法不同,功效不同,就好比你要调用网上的一个图片,这个图片可以是变量,可以是方法,可以是类.你要调用可以把他幻化成接口, ...
- vue_cli下开发一个简单的模块权限系统之实现登录
因为我们需要和后端数据交互,所以我们需要安装axios,安装好以后在main.js引入 v-model是标识空间,v-on:click="doLogin"是登录事件 doLogin ...
- C语言数据结构-队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-队列的实现-C语言 //队列的存储结构 #define MAXSIZE 100 typedef struct { int* base; //基地址 int _front; //头指针 i ...
- 树形DP【洛谷P3047】 [USACO12FEB]附近的牛Nearby Cows
P3047 [USACO12FEB]附近的牛Nearby Cows 农民约翰已经注意到他的奶牛经常在附近的田野之间移动.考虑到这一点,他想在每一块土地上种上足够的草,不仅是为了最初在这片土地上的奶牛, ...
- kuangbin专题七 HDU1754 I Hate It (单点修改维护最大值)
很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...
- 2017年6月15日 由一个freemarker出错引发的感想
今天想要实现一个功能,想要实现遍历多个checkbox的功能.想出一个解决方法用了30秒钟,将包含的键值put进map中,前台根据map[key]??判断是否具有该值,乍一看这个方法很好,可是实际上问 ...