1. HttpClient最主要的函数是执行HTTP方法,包括HTTP请求和响应。用户向HttpClient提供一个request对象,由HttpClient负责将请求发送给目标服务器,随后返回一个response对象或者扔出异常。
2. HTTP请求行包含一个方法名、请求URI和HTTP协议版本。HttpClient支持HTTP/1.1定义的所有方法:GET、HEAD、POST、PUT、DELETE、TRACE和OPTIONS,分别对应HttpGet、HttpHead、HttpPost、HttpPut、HttpDelete、HttpTrace、HttpOptions类。HttpClient提供URIBuilder构建URI。
3. HTTP响应是服务器返回给客户端的一条消息,消息第一行包括协议版本和数字状态码及其相应的文本。Http消息可以包含几个头,描述消息的特性,例如内容长度、内容类型、设置cookie等。HttpClient提供方法获取、添加、移除和枚举HTTP头。HTTP消息也可以携带HTTP实体。HTTP提供两种实体封装请求的方法,PUT和POST。response通常都包含HTTP实体,对HEAD方法和204 No Content、304 Not Modified、205 Reset Content响应除外。HttpClient根据实体内容的来源,区分为流式的、自我包含的、封装的。
自我包含的实体ByteArrayEntity和StringEntity是可重用的。HttpEntity的getContentType、getContentLength和getContentEncoding方法读取实体的元信息。
关闭HttpEntity.getContent对应的输入流和关闭HttpResponse.close的区别在于会否立即切断HTTP连接。在处理流式实体时,EntityUtils的consume方法确保内容实体被完全消耗,对应的流也被关闭。在只需要利用实体中的少量内容的情况下,消耗整个实体的代价较大,此时可以直接关闭HttpResponse,连接之后不能重用,但是所有占用的资源会被正确的释放。通过BufferedHttpEntity封装,会将HttpEntity的内容读入内存,以被重用。
HttpClient提供StringEntity、ByteArrayEntity、InputStreamEntity、FileEntity封装相应对象。UrlEncodedFormEntity将List<NameValuePair>封装。
ResponseHandler接口提供handleResponse(HttpResponse response)方法,处理消息。
多个逻辑相关的请求可以构成一个逻辑会话,如果在连续的请求中使用相同的上下文背景。HTTP context类似于Map<String, Object>,是任意键值对的集合。HttpConnection代表同目标机器的连接实例,HttpHost代表目标主机,HttpRoute代表完整的连接路径,HttpRequest代表实际的HTTP请求,HttpResponse是真实的HTTP响应,Boolean表征请求是否完全发送,RequestConfig是真实的请求配置,List<URL>代表所有重定向的位置。
HTTP协议时面向请求应答的,不支持交易操作。
idempotent方法:N个相同的请求的响应相同。HttpClient中GET和HEAD是幂等的,POST和PUT不是。
HttpRequestRetryHandler接口定义异常恢复机制。
1. HttpClient支持3种不同的HTTP认证方式:Basic, Digest, NTLM. HttpClient几乎透明的处理服务器方的认证,开发者唯一需要做的就是提供登陆的凭证。这些凭证被保存在HttpState实例中,可以setCredentials(AuthScope authscope, Credentials cred)和getCredentials(AuthScope authscope)方法设置和获取凭证。内置在HttpClient中的自动认证可以通过方法HttpMethod.setAuthentification(boolean doAuthentification)取消。该设置仅仅影响所在的HttpMethod实例。Preemptive认证可以通过client.getParams().setAuthentificationPreemptive(true)设置开启。优先认证也需要为连接的目标服务器或者代理,设置默认的凭证,没有设置凭证将导致优先认证失效。Credentials defaultcreds = new UsernamePasswordCredentials("username", "password") client.getState().setCredentials(new AuthScope("myhost", 80, AuthScope.ANY_REALM), defaultcreds). 在和不可信的服务器认证时,应该尽可能缩小认证的范围,指定host, realm。Basic认证模式是最原始也是兼容性最强的HTTP认证模式,然而却也是最不安全的,它直接就将username和password不经过加密发送给服务器。Digest模式会对密码进行加密。
2. Options请求获取通讯可选项信息,GET返回URL所定位的任何资源,HEAD和GET相同只是返回的响应中不包含任何内容实体,可以用于获取文档的元信息,而不传送文档本身的内容,POST用于向服务器请求将请求实体中的内容作为URL的一部分
3. 有一些重定向类型HttpClient不能够自动处理,要么是因为要求用户交互,要么是返回的状态码不在HttpClient处理的范围之内,或者是内部的限制。当前HttpClient不能够自动处理包含内容实体的重定向,例如POST和PUT。
1. HTTP状态管理
HTTP cookie就是HTTP代理和服务器相互交换保持会话的令牌或信息包。
兼容Netscape draft却不兼容官方标准的cookie被认为是版本0.和标准兼容的cookie被认为是版本1. HttpClient可能会根据版本的不同处理cookie。可以通过BasicClientCookie创建不同版本的cookie。
CookieSpec接口表示cookie的标准。解析Set-Cookie以及可选的Set-Cookie2头的规则;确认解析的Cookie;为一个给定的host,port,原始路径格式化cookie。HttpClient提供了多个cookie标准选项:Netscape draft, Standard, Browser compatibility, Best match, Ignore cookies.
HttpClient可以结合持久化的CookieStore接口。BasicCookieStore是一个基于ArrayList的简单的实现。当容器对象被GC收集掉后,保存在BasicClientCookie对象中的cookie将丢失。
在HTTP请求执行时,HttpClient将添加下面状态管理相关的对象:Lookup代表cookie标准注册表,CookieSpec代表cookie标准,CookieOrigin代表真实服务器的真实细节,CookieStore。
2. HTTP连接管理
建立端到端的连接过程比较复杂,可能包括多次packet的交换,也比较耗时。建立连接时的握手就是一个很大的开销,特别是对小的HTTP信息包。如果打开的连接能够被重用,来执行多个请求效率将大大提高。保持连接alive状态也成为连接持久化。
HttpClient区别路由方式为:plain,tunneled,layered。使用多个中间代理,来建立到目标机器的连接也成为proxy chaining。
相关推荐
在HttpClient的使用中,我们首先需要了解几个核心组件: 1. **HttpClient实例**:这是整个HTTP通信的基础,通过`HttpClientBuilder`创建,可以设置各种配置,如连接超时、重试策略等。 2. **HttpRequestBase**:这...
本文主要讲述如何利用Java编程语言中的Jsoup库和HttpClient工具包来获取和解析动态生成的数据,特别是那些通过JavaScript动态加载的数据。 ### Java爬虫基础 Java爬虫是指使用Java语言编写的一类程序,这些程序...
### 小结 正确设置这些头部信息对于确保HTTP请求能够按照预期的方式工作至关重要。特别是当涉及到跨站请求伪造(CSRF)防护、API调用、内容协商等功能时,这些头部信息更是不可或缺。希望通过对这些头部信息的介绍,...
#### 小结 本篇文章详细介绍了如何使用`HttpClient`通过GET和POST方式提交数据到服务器的方法。GET请求适用于获取数据,而POST请求则用于向服务器发送数据。在实际开发过程中,根据具体需求选择合适的请求方式非常...
### 小结 在*** Core 2.1中使用`HttpClient`时,推荐使用依赖注入框架来管理`HttpClient`的生命周期,以避免资源耗尽的问题。使用单例模式时,必须考虑到DNS信息更新和主机名称解析的问题,确保应用能够适应网络...
《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言 第一部分 准备篇 第1章 Android开发简介 1.1 Android基本概念 1.1.1 Android简介 1.1.2 Android的系统构架 ... 17.4小结
这个例子中,`HttpClient::quickPost()` 方法发送POST请求并获取服务器响应,同样将结果按指定格式处理。这种方式更直接地操控网络连接,适用于更复杂的网络交互场景。 第三,PHP5引入了SOAP(Simple Object Access...
作者简介 杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。... 17.4小结
目录 第一篇 Android开发初步 第1章 Android初识 1.1 Android简介 1.1.1 认识Android 1.1.2 Android系统框架 1.1.3 应用程序框架 1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK ...16.7 本章小结
1.3 小结 第2章 Android开发环境搭建 2.1 Android开发准备工作 2.2 开发包及其工具的安装和 配置 2.2.1 安装JDK和配置Java开发 环境 2.2.2 Eclipse的安装与汉化 2.2.3 SDK和ADT的安装和 配置 2.3 创建第一个Android...
杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件...17.4小结
这些功能可以借助Java的丰富的库和框架来实现,如Apache HttpClient库进行HTTP请求,JSON库如Jackson或Gson进行数据交换,Spring框架简化网络服务的开发等。 总的来说,通过Java实现群聊和同步画图,我们需要掌握...
内容提要 -------------------------------------------------------------------------------- 国内第一本基于Android 2.0的经典著作,5大专业社区联袂推荐,权威性毋庸置疑!《Android应用开发揭秘》...17.4小结
1.8 小结 第2章 设置开发环境 2.1 设置环境 2.1.1 下载JDK 6 2.1.2 下载Eclipse 3.6 2.1.3 下载Android SDK 2.1.4 命令行窗口 2.1.5 安装ADT 2.2 了解基本组件 2.2.1 View 2.2.2 ...
1.8 小结 第2章 设置开发环境 2.1 设置环境 2.1.1 下载JDK 6 2.1.2 下载Eclipse 3.6 2.1.3 下载Android SDK 2.1.4 命令行窗口 2.1.5 安装ADT 2.2 了解基本组件 2.2.1 View 2.2.2 ...
- 创建HttpClient对象:`HttpClient client = new DefaultHttpClient();` - 创建请求对象,如HttpGet或HttpPost:`HttpGet httpGet = new HttpGet(path);` - 执行请求:`HttpResponse response = client.execute...
本章小结 42 第4章 UI基础知识 43 4.1 Android UI组件概述 43 4.1.1 View 43 4.1.2 ViewGroup 44 4.1.3 布局管理器 44 4.2 UI设计工具 44 4.2.1 DroidDraw工具 44 4.2.2 ADT插件UI设计工具 46 4.3 事件处理...
1.4 小结 11 第2章 OPhone开发环境和流程 12 2.1 安装Eclipse和ODT 12 2.1.1 安装Java SDK 12 2.1.2 安装Eclipse 13 2.1.3 安装OPhone SDK 13 2.1.4 安装和配置ODT插件 14 2.2 第一个OPhone应用程序 16 2.2.1 新建...
1.7 本章小结 33 第2章 Android应用的界面编程 35 2.1 界面编程与视图(View)组件 36 2.1.1 视图组件与容器组件 36 2.1.2 使用XML布局文件控制UI 界面 40 2.1.3 在代码中控制UI界面 41 2.1.4 使用...