HttpClient3.1高级应用
1. 下载地址:http://hc.apache.org/downloads.cgi
2. GET方法
public class MyHttpClient extends HttpClient { static HttpClient myHttp = null; static int number = 0; public static HttpClient getHttpClient() { if (myHttp == null || number > 500) { myHttp = new HttpClient(); myHttp.getHttpConnectionManager().getParams() .setConnectionTimeout(60000); number = 0; } number++; return myHttp; } }
public static String doGet(String url, String setCode, String readCode) { String sTotalString = ""; setCode = (setCode == null || "".equals(setCode)) ? "gb2312" : setCode; readCode = (readCode == null || "".equals(readCode)) ? "gb2312" : readCode; GetMethod get = new GetMethod(url); get.getParams().setHttpElementCharset(setCode); get.getParams().setCredentialCharset(setCode); get.getParams().setContentCharset(setCode); try { HttpClient httpClient = MyHttpClient.getHttpClient(); int statusCode = httpClient.executeMethod(get); if (statusCode != HttpStatus.SC_OK) { return "查询失败!"; } byte[] responseBody = get.getResponseBody(); ByteArrayInputStream is = new ByteArrayInputStream(responseBody); BufferedReader l_reader = new BufferedReader(new InputStreamReader( is, readCode)); String sCurrentLine = ""; while ((sCurrentLine = l_reader.readLine()) != null) { sTotalString += sCurrentLine; } } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { get.releaseConnection(); sTotalString = (sTotalString == null) ? "查询失败" : sTotalString; } return sTotalString; }
3. POST方法
public static String doPost(String url, NameValuePair[] param, String setCode, String readCode) { String sTotalString = ""; setCode = (setCode == null || "".equals(setCode)) ? "gb2312" : setCode; readCode = (readCode == null || "".equals(readCode)) ? "gb2312" : readCode; PostMethod post = new PostMethod(url); post.getParams().setHttpElementCharset(setCode); post.getParams().setCredentialCharset(setCode); post.getParams().setContentCharset(setCode); post.setRequestBody(param); try { HttpClient httpClient = MyHttpClient.getHttpClient(); int statusCode = httpClient.executeMethod(post); if (statusCode != HttpStatus.SC_OK) { return "查询失败!"; } byte[] responseBody = post.getResponseBody(); ByteArrayInputStream is = new ByteArrayInputStream(responseBody); BufferedReader l_reader = new BufferedReader(new InputStreamReader( is, readCode)); String sCurrentLine = ""; while ((sCurrentLine = l_reader.readLine()) != null) { sTotalString += sCurrentLine; } } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { post.releaseConnection(); sTotalString = (sTotalString == null) ? "查询失败" : sTotalString; } return sTotalString; }
4. 下载验证码图片
public static void getYzm(String url, String Path) { PostMethod post = new PostMethod(url); try { HttpClient httpClient = MyHttpClient.getHttpClient(); int statusCode = httpClient.executeMethod(post); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { InputStream i = post.getResponseBodyAsStream(); if (i != null) { writePic(i, Path); } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public static void download(String url, String path) { HttpClient client = MyHttpClient.getHttpClient(); GetMethod get = new GetMethod(url); try { int statusCode = client.executeMethod(get); try { writePic(get.getResponseBody(), path); } catch (Exception e) { e.printStackTrace(); } } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void writePic(byte[] responseBody, String Path) throws Exception { ByteArrayInputStream is = new ByteArrayInputStream(responseBody); BufferedInputStream in = new BufferedInputStream(is); FileOutputStream fo = new FileOutputStream(Path); BufferedOutputStream out = new BufferedOutputStream(fo); byte[] buf = new byte[1024]; int len = in.read(buf); while (len != -1) { out.write(buf, 0, len); len = in.read(buf); } out.close(); fo.close(); in.close(); } public static void writePic(InputStream i, String Path) throws Exception { BufferedInputStream in = new BufferedInputStream(i); FileOutputStream fo = new FileOutputStream(Path); BufferedOutputStream out = new BufferedOutputStream(fo); byte[] buf = new byte[1024]; int len = in.read(buf); while (len != -1) { out.write(buf, 0, len); len = in.read(buf); } out.close(); fo.close(); in.close(); }
5. 疑难问题解决
(1) 针对某些不能返回数据问题的解决方法
/** * 针对不能返回数据问题的POST提交 * @param mainUrl 发票查询主页面URL * @param url 提交查询的URL * @param param * @param setCode * @param readCode * @return * 先到主页面访问一次,获取到COOKIES,将COOKIES设置到提交查询的请求中,在执行提交查询的访问。 */ public static String doPost(String mainUrl, String url, NameValuePair[] param, String setCode, String readCode) { PostMethod method = new PostMethod(mainUrl); try { HttpClient httpClient = MyHttpClient.getHttpClient(); int statusCode = httpClient.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { return "查询失败!"; } Cookie[] cookies = httpClient.getState().getCookies(); httpClient.getState().addCookies(cookies); } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { method.releaseConnection(); } return doPost(url, param, setCode, readCode); }
(2) 针对不能获取到验证码图片的问题
/** * 针对有防盗链机制的网站获取验证码图片 * @param list HTTP HEADER信息 * @param url * @param path * @return */ public static void getYzm(List<Header> headers, String url, String path) { HttpClient httpClient = MyHttpClient.getHttpClient(); httpClient.getHostConfiguration().getParams().setParameter("http.default-headers", headers); download(url, path); }
相关推荐
四、HttpClient的高级特性 1. 连接管理:HttpClient支持连接池,可以控制连接的复用和释放,提高性能。 2. 身份验证:支持多种认证机制,如Basic、Digest、NTLM等,可以通过HttpContext存储认证信息。 3. 重定向处理...
综上,这个项目结合了HttpClient进行网络通信的高级用法,以及文件系统监控的底层操作,为构建健壮的分布式系统提供了一个实用的工具。通过阅读和理解源代码,开发者可以学习到如何构建高效、灵活的网络监控和文件...
- **灵活性**:与标准库提供的简单HTTP支持相比,HttpClient提供了更多高级特性,比如Cookie管理和自动重定向等,使得开发者可以更灵活地控制HTTP交互行为。 ##### 2.2 HttpClient的功能范围 - **HTTP协议支持**:...
《HttpClient 4.5详解与应用实践》 HttpClient是一个开源的Java库,由Apache软件基金会维护,主要用于在HTTP协议上实现客户端的通信。版本4.5是HttpClient的一个稳定版本,提供了许多增强的功能和优化,使其成为...
通过HttpClient实例,我们可以配置连接管理、重试策略、超时设置等高级特性。 2. **HttpHost对象**:表示目标服务器的信息,包括主机名、端口号和协议类型(HTTP或HTTPS)。 3. **HttpRequest与HttpResponse**:...
三、HttpClient的高级特性 1. **连接管理**:HttpClient支持连接池,可以通过HttpConnectionManager来管理多个连接,提高性能和效率。 2. **认证和安全**:HttpClient支持多种认证机制,包括基本认证、摘要认证等...
HttpClient提供了更高级的功能,如支持HTTP/1.1协议,支持代理,重定向,连接池,以及自定义请求和响应头等。这个库特别适合需要进行复杂HTTP操作的应用程序。 2. **commons-fileupload-1.2.2.jar**:Apache ...
《HttpClient 4.5.5:全面解析与应用实践》 HttpClient 是 Apache 开源基金会提供的一款强大而灵活的 Java 客户端 HTTP 实现库,主要用于处理 HTTP 协议的请求和响应。HttpClient 4.5.5 版本是其系列中的一个重要...
《Android开发中的HttpClient详解及其应用》 在Android应用程序开发中,网络通信是不可或缺的一部分,而Apache HttpClient库则是实现网络请求的常用工具之一。本篇文章将深入解析`httpclient-4.3.6.jar`包,它是...
《HttpClient 4.4 Jar包详解与应用》 HttpClient是一个由Apache基金会开发的Java库,主要功能是提供HTTP客户端服务,使得Java程序可以方便地发送HTTP请求并接收响应。HttpClient 4.4版本是其发展过程中的一个重要...
HttpClient适用于单次请求,但如果需要进行大量的并发请求,可能需要考虑使用更高级的异步模型,如Apache HttpClient的AsyncClient。 总之,HttpClient是Java开发中处理HTTP请求的强大工具,它提供了一套完整的API...
3. **消息头管理**:HttpClient支持处理HTTP消息头。消息头是HTTP请求和响应的一部分,可以用于控制HTTP协议的行为,比如设置内容类型、缓存控制等。 4. **异常处理**:在处理HTTP通信时,可能会遇到各种异常情况。...
Java HttpClient 是一个强大的HTTP客户端库,它允许Java开发者在应用程序中发送HTTP请求并接收响应,广泛应用于Web服务的调用、API接口测试以及自动化脚本等场景。在Java项目中,使用HttpClient可以实现与Web服务器...
此外,HttpClient 还支持设置请求头、身份验证、连接管理、超时控制等高级功能,以满足各种复杂的网络通信需求。 HttpClient 不是浏览器,它不会解析 HTML 内容或执行 JavaScript。它是一个低级别的库,主要用于...
此外,还提及了 HttpClient能够以插件式的自定义认证方案以及支持持久连接等高级功能。 在基础知识方面,文档首先讲解了环境的准备,包括下载HttpClient包并将其导入到工程中的具体步骤。随后介绍了几个主要的类,...
本文将围绕HttpClient 4.4.1和4.5.3这两个版本,深入探讨它们的特性和改进,以帮助开发者更好地理解和应用这个强大的工具。 1. HttpClient 4.4.1 HttpClient 4.4.1是HttpClient系列的一个稳定版本,它主要关注性能...
9. **HTTP协议升级**:HttpClient支持HTTP/1.1和HTTP/2,可以处理WebSocket等高级协议。 10. **SSL/TLS支持**:HttpClient可以配置SSLContext和TrustManager来处理HTTPS请求,进行证书验证。 在学习HttpClient时,...
在IT行业中,网络通信是应用程序之间交互的重要方式,而HTTPClient是Java开发中常用的一款库,用于执行HTTP请求。这个“HTTPClient的一个封装”显然指的是对Apache HttpClient库进行了定制化处理,以适应特定项目...
在Android应用程序中,`HttpClient`经常被用于实现网络通信,比如上传或下载文件。下面将详细讨论`HttpClient`在Android中的应用及其相关知识点。 一、`HttpClient`基础 1. `HttpClient`类:它是整个框架的核心,...
《HttpClient 3.1 JavaDoc CHM版》详解 HttpClient 是一个开源的Java库,由Apache软件基金会维护...虽然HttpClient已经更新到更高级的版本,但这个旧版本的文档对于维护旧项目或理解HTTP通信基础仍然具有很高的价值。