`
332337246
  • 浏览: 59982 次
  • 性别: Icon_minigender_1
  • 来自: 呼和浩特
社区版块
存档分类
最新评论

HttpClient3高级应用

    博客分类:
  • Java
阅读更多

 

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-4.5.3官方API中文文档_最新译版_2886K

    四、HttpClient的高级特性 1. 连接管理:HttpClient支持连接池,可以控制连接的复用和释放,提高性能。 2. 身份验证:支持多种认证机制,如Basic、Digest、NTLM等,可以通过HttpContext存储认证信息。 3. 重定向处理...

    基于httpclient的文件可配置的心跳检测应用

    综上,这个项目结合了HttpClient进行网络通信的高级用法,以及文件系统监控的底层操作,为构建健壮的分布式系统提供了一个实用的工具。通过阅读和理解源代码,开发者可以学习到如何构建高效、灵活的网络监控和文件...

    httpclient

    通过HttpClient实例,我们可以配置连接管理、重试策略、超时设置等高级特性。 2. **HttpHost对象**:表示目标服务器的信息,包括主机名、端口号和协议类型(HTTP或HTTPS)。 3. **HttpRequest与HttpResponse**:...

    httpClient

    HttpClient提供了更高级的功能,如支持HTTP/1.1协议,支持代理,重定向,连接池,以及自定义请求和响应头等。这个库特别适合需要进行复杂HTTP操作的应用程序。 2. **commons-fileupload-1.2.2.jar**:Apache ...

    httpclient4.5.5所有包

    《HttpClient 4.5.5:全面解析与应用实践》 HttpClient 是 Apache 开源基金会提供的一款强大而灵活的 Java 客户端 HTTP 实现库,主要用于处理 HTTP 协议的请求和响应。HttpClient 4.5.5 版本是其系列中的一个重要...

    httpclient方式调用url

    HttpClient适用于单次请求,但如果需要进行大量的并发请求,可能需要考虑使用更高级的异步模型,如Apache HttpClient的AsyncClient。 总之,HttpClient是Java开发中处理HTTP请求的强大工具,它提供了一套完整的API...

    httpclient-4.3.6.jar包,安卓异步框架必备

    《Android开发中的HttpClient详解及其应用》 在Android应用程序开发中,网络通信是不可或缺的一部分,而Apache HttpClient库则是实现网络请求的常用工具之一。本篇文章将深入解析`httpclient-4.3.6.jar`包,它是...

    httpclient4.4 jar包

    《HttpClient 4.4 Jar包详解与应用》 HttpClient是一个由Apache基金会开发的Java库,主要功能是提供HTTP客户端服务,使得Java程序可以方便地发送HTTP请求并接收响应。HttpClient 4.4版本是其发展过程中的一个重要...

    commons-httpclient-3.0.jar JAVA中使用HttpClient可以用到

    三、HttpClient的高级特性 1. **连接管理**:HttpClient支持连接池,可以通过HttpConnectionManager来管理多个连接,提高性能和效率。 2. **认证和安全**:HttpClient支持多种认证机制,包括基本认证、摘要认证等...

    HTTPClient 的一个封装

    在IT行业中,网络通信是应用程序之间交互的重要方式,而HTTPClient是Java开发中常用的一款库,用于执行HTTP请求。这个“HTTPClient的一个封装”显然指的是对Apache HttpClient库进行了定制化处理,以适应特定项目...

    Java HttpClient 全部的jar包

    Java HttpClient 是一个强大的HTTP客户端库,它允许Java开发者在应用程序中发送HTTP请求并接收响应,广泛应用于Web服务的调用、API接口测试以及自动化脚本等场景。在Java项目中,使用HttpClient可以实现与Web服务器...

    httpclient4.3中文教程

    此外,HttpClient 还支持设置请求头、身份验证、连接管理、超时控制等高级功能,以满足各种复杂的网络通信需求。 HttpClient 不是浏览器,它不会解析 HTML 内容或执行 JavaScript。它是一个低级别的库,主要用于...

    httpClient4.1入门教程.pdf

    此外,还提及了 HttpClient能够以插件式的自定义认证方案以及支持持久连接等高级功能。 在基础知识方面,文档首先讲解了环境的准备,包括下载HttpClient包并将其导入到工程中的具体步骤。随后介绍了几个主要的类,...

    httpclient4.4.1 and httpclient4.5.3.rar

    本文将围绕HttpClient 4.4.1和4.5.3这两个版本,深入探讨它们的特性和改进,以帮助开发者更好地理解和应用这个强大的工具。 1. HttpClient 4.4.1 HttpClient 4.4.1是HttpClient系列的一个稳定版本,它主要关注性能...

    httpClient4.3.6包和实例

    9. **HTTP协议升级**:HttpClient支持HTTP/1.1和HTTP/2,可以处理WebSocket等高级协议。 10. **SSL/TLS支持**:HttpClient可以配置SSLContext和TrustManager来处理HTTPS请求,进行证书验证。 在学习HttpClient时,...

    android HttpClient

    在Android应用程序中,`HttpClient`经常被用于实现网络通信,比如上传或下载文件。下面将详细讨论`HttpClient`在Android中的应用及其相关知识点。 一、`HttpClient`基础 1. `HttpClient`类:它是整个框架的核心,...

    httpclient3.1 javadoc chm版

    《HttpClient 3.1 JavaDoc CHM版》详解 HttpClient 是一个开源的Java库,由Apache软件基金会维护...虽然HttpClient已经更新到更高级的版本,但这个旧版本的文档对于维护旧项目或理解HTTP通信基础仍然具有很高的价值。

    httpclient4.3.5

    四、HttpClient高级特性 1. **连接池管理**:通过PoolingHttpClientConnectionManager,可以配置连接池大小,实现连接的复用。 2. **重试策略**:HttpClient支持自定义重试策略,当请求失败时可以根据策略决定是否...

    最全最新httpclient4.3.3

    HttpClient 4.3.3是该系列的一个稳定版本,它不仅包含了执行HTTP请求的基本功能,还提供了许多高级特性,如连接管理、重试策略、身份验证等。 二、核心组件 HttpClient 4.3.3的核心组件包括: 1. HttpClient:主...

    httpclient 4.5.1

    四、HttpClient 高级应用 1. **异步操作**:HttpClient 提供了异步 API,允许非阻塞地执行请求,提高系统并发性能。 2. **自定义拦截器**:可以添加请求和响应拦截器,用于修改请求或响应,实现如日志记录、数据...

Global site tag (gtag.js) - Google Analytics