/**
* 此接口仅代表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 源码分析的更多相关文章

  1. 【原】Spark中Client源码分析(二)

    继续前一篇的内容.前一篇内容为: Spark中Client源码分析(一)http://www.cnblogs.com/yourarebest/p/5313006.html DriverClient中的 ...

  2. 【原】Spark中Client源码分析(一)

    在Spark Standalone中我们所谓的Client,它的任务其实是由AppClient和DriverClient共同完成的.AppClient是一个允许app(Client)和Spark集群通 ...

  3. Thrift笔记(四)--Thrift client源码分析

    thrift文件 namespace java com.gxf.demo namespace py tutorial typedef i32 int // We can use typedef to ...

  4. Spring Cloud Netflix Eureka client源码分析

    1.client端 EurekaClient提供三个功能: EurekaClient API contracts are:* - provide the ability to get Instance ...

  5. Docker源码分析(二):Docker Client创建与命令执行

    1. 前言 如今,Docker作为业界领先的轻量级虚拟化容器管理引擎,给全球开发者提供了一种新颖.便捷的软件集成测试与部署之道.在团队开发软件时,Docker可以提供可复用的运行环境.灵活的资源配置. ...

  6. hadoop的RPC机制 -源码分析

    这些天一直奔波于长沙和武汉之间,忙着腾讯的笔试.面试,以至于对hadoop RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上 ...

  7. Hadoop的RPC机制源码分析

    分析对象: hadoop版本:hadoop 0.20.203.0 必备技术点: 1. 动态代理(参考 :http://www.cnblogs.com/sh425/p/6893662.html )2. ...

  8. elasticsearch源码分析之search模块(client端)

    elasticsearch源码分析之search模块(client端) 注意,我这里所说的都是通过rest api来做的搜索,所以对于接收到请求的节点,我姑且将之称之为client端,其主要的功能我们 ...

  9. Eureka 源码分析之 Eureka Client

    文章首发于微信公众号<程序员果果> 地址:https://mp.weixin.qq.com/s/47TUd96NMz67_PCDyvyInQ 简介 Eureka是一种基于REST(Repr ...

随机推荐

  1. net core 使用 SqlSugar

    /// <summary> /// SqlSugar 注入Service的扩展方法 /// </summary> public static class SqlSugarSer ...

  2. 从零开始搭建.NET Core 2.0 API(学习笔记一)

    从零开始搭建.NET Core 2.0 API(学习笔记一) 一. VS 2017 新建一个项目 选择ASP.NET Core Web应用程序,再选择Web API,选择ASP.NET Core 2. ...

  3. sqlite3使用备忘

    执行sqlite3进入sqlite3环境: $ sqlite3 SQLite version -- :: Enter ".help" for usage hints. Connec ...

  4. 自定义Mybatis框架

    项目结构:      https://files-cdn.cnblogs.com/files/mkl7/ownMybatis.zip 1. 创建maven工程并引入坐标: <?xml versi ...

  5. chrome插件-YSlow 一个使用的web性能测试插件

    本文为转载是文章,如作者发现后不愿意,请联系我进行删除 原文链接:http://www.cnblogs.com/wajika/p/6278825.html YSlow的安装: 1.安装 firebug ...

  6. Mysql安装(Mac)

    1.安装mysql(百度详解) 2.打开终端 3.输入vim ~/.bash_profile 4.在最后加上PATH=$PATH:/usr/local/mysql/bin 5.按esc,然后输入 :w ...

  7. zookeeper客户端使用第三方(Curator)封装的Api操作节点

    1.为什么使用Curator? Curator本身是Netflix公司开源的zookeeper客户端: Curator  提供了各种应用场景的实现封装: curator-framework  提供了f ...

  8. stdin stdout stderr 标准I/O流

    Unix中一切皆文件,磁盘等设备在操作系统来看都是文件. 对文件进行操作时,需要打开这个文件,并获得文件描述符(file descriptor, fd) 而每个进程生来就有三个文件描述符绑定在它身上, ...

  9. Codeforces Round #520 (Div. 2) B math(素数因子的应用)

    题意: 给出一个n ; 有两个操作: 1,mul A   ,   n=n*A   : 2,sqrt()  ,  n=sqrt(n)  开更出来必须是整数 : 求出经过这些操作后得出的最小  n , 和 ...

  10. p标签text-align:justify以及CSS文字两端对齐

    p标签样式添加text-align:justify; 那么就会左右对齐. 使用前: 使用后: CSS文字两端对齐 使用前: 代码: <style> div{ width:100px; he ...