By Lee - Last updated: 星期二, 五月 20, 2014

出于某些原因,有时候需要通过程序模拟浏览器的行为来获取或者像服务器提交数据,Java提供的简单的java.net工具,Apache同样提供了一个httpcomponents-client,这两个工具主要的区别如下表: 对比项目URLConnectionHTTPClient提交方式(Methods)HEAD, GET, POST, PUT, DELETE, TRACE, OPTIONSHEAD, GET, POST, PUT, DELETE, TRACE, OPTIONS, WEBDav, IPP, 甚至各种自定义提交方式响应(Response Codes)只能获取http状态码小于400的状态码,响应头信息(headers),响应内容.对于响应状态码为4xx或者5xx获取response的任何信息都只会抛出IOException任何时候都可以获取响应的任何信息:响应状态码,响应头信息,响应内容信息等等。代理和SOCKS支持,SOCKS仅支持4支持,SOCKS支持4和5认证(Authorization)支持Basic、早期的Digest JDK1.2+(不支持现在的Digest authentication),甚至不能处理apache返回的Digest信息支持Basic、Digest Authentication、自定义的其他认证方案Cookies不支持支持请求输出流 (True request output streams)请求发送之前,所有的数据都被缓存起来通过socket直接输出HttpOutputStream响应输入流 (True response input streams)JDK1.2-支持,1.3+不支持chunked encoding(不支持大多数推送服务器的响应)支持长连接 (Persistent Connections)JDK1.2- HTTP/1.0 Keep-Alive,JDK1.3+ HTTP/1.1 Persistent支持HTTP/1.0 Keep-Alive 和 HTTP/1.1 PersistentPipelining of Requests不支持支持设置超时不支持支持处理HTTP之外的协议支持如:ftp, gopher, mailto,文件系统不支持处理HTTPs支持部分SSL,如JSSE,前提是客户端必须安装可以通过补丁的方式使用免费或者收费的SSL开源否是 原文地址:http://www.sxrczx.com/t/article/a03358511cd84c29869161d4da0838d7.htm.