`
Jatula
  • 浏览: 279664 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HttpClient Examples:Threaded request execution

阅读更多

官方主頁:http://hc.apache.org/

 

Components

Threaded request execution

An example that executes HTTP requests from multiple worker threads.

 

线程请求执行

 

一个多线程程执行HTTP请求的例子。

 

package cn.lake.util;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.util.EntityUtils;

/**
 * An example that performs GETs from multiple threads.
 * 
 * @author Michael Becke
 */
public class ClientMultiThreadedExecution {

	public static void main(String[] args) throws Exception {
		// Create and initialize HTTP parameters
		HttpParams params = new BasicHttpParams();
		ConnManagerParams.setMaxTotalConnections(params, 100);
		HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);

		// Create and initialize scheme registry 
		SchemeRegistry schemeRegistry = new SchemeRegistry();
		schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
		schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));

		// Create an HttpClient with the ThreadSafeClientConnManager.
		// This connection manager must be used if more than one thread will
		// be using the HttpClient.
		ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);
		HttpClient httpClient = new DefaultHttpClient(cm, params);

		// create an array of URIs to perform GETs on
		String[] urisToGet = { "http://jakarta.apache.org/", "http://jakarta.apache.org/commons/",
				"http://jakarta.apache.org/commons/httpclient/", "http://svn.apache.org/viewvc/jakarta/httpcomponents/" };

		// create a thread for each URI
		GetThread[] threads = new GetThread[urisToGet.length];
		for (int i = 0; i < threads.length; i++) {
			HttpGet httpget = new HttpGet(urisToGet[i]);
			threads[i] = new GetThread(httpClient, httpget, i + 1);
		}

		// start the threads
		for (int j = 0; j < threads.length; j++) {
			threads[j].start();
		}

	}

	/**
	 * A thread that performs a GET.
	 */
	static class GetThread extends Thread {

		private final HttpClient httpClient;
		private final HttpContext context;
		private final HttpGet httpget;
		private final int id;

		public GetThread(HttpClient httpClient, HttpGet httpget, int id) {
			this.httpClient = httpClient;
			this.context = new BasicHttpContext();
			this.httpget = httpget;
			this.id = id;
		}

		/**
		 * Executes the GetMethod and prints some status information.
		 */
		@Override
		public void run() {

			System.out.println(id + " - about to get something from " + httpget.getURI());

			try {

				// execute the method
				HttpResponse response = httpClient.execute(httpget, context);

				System.out.println(id + " - get executed");
				// get the response body as an array of bytes
				HttpEntity entity = response.getEntity();
				if (entity != null) {
					byte[] bytes = EntityUtils.toByteArray(entity);
					System.out.println(id + " - " + bytes.length + " bytes read");
				}

			} catch (Exception e) {
				httpget.abort();
				System.out.println(id + " - error: " + e);
			}
		}

	}

}

 

翻譯的不好,請見諒!

分享到:
评论
5 楼 karidyang 2009-02-01  
因为这是中文~~~~
4 楼 gembler 2009-01-15  
给个理由为什么不去看官方文档而看你的贴子
3 楼 struts 2009-01-15  
你发的这些东西有什么用?怎么用?
2 楼 Jatula 2009-01-15  
dhxlsfn 写道

建议楼主发的"HttpClient Examples:..."系列放到“入门讨论区”去。 原因如下: 1) 开贴多,每贴有效内容少 2) 没什么原创,基本上是拷贝Apache HttpClient的原文和例子,每贴翻译一句话。相信真需要使用HttpClient的人,会去官方网站看文档,而不是来这里。 这样的帖子太多会造成Java版面质量下降,首页几乎全是这系列帖子了,原创都给挤没了。 感觉楼主在疯狂刷分,呵呵。

不好意思,不过我只把这里当存一些有点用的地方了,具体说刷分吗,分数我倒不看重,楼主要扣就扣吧;顺便问一句,怎么才能发了之后不会挤掉别人的文章,因为影响质量也不好;
1 楼 dhxlsfn 2009-01-15  
建议楼主发的"HttpClient Examples:..."系列放到“入门讨论区”去。

原因如下:
1) 开贴多,每贴有效内容少
2) 没什么原创,基本上是拷贝Apache HttpClient的原文和例子,每贴翻译一句话。相信真需要使用HttpClient的人,会去官方网站看文档,而不是来这里。

这样的帖子太多会造成Java版面质量下降,首页几乎全是这系列帖子了,原创都给挤没了。

感觉楼主在疯狂刷分,呵呵。

相关推荐

    HttpClient问题:The server failed to respond with a valid HTTP resp

    使用`MultiThreadedHttpConnectionManager`管理连接,并确保每个请求都有独立的HttpClient实例,或者对共享的HttpClient实例进行适当的同步,避免并发问题。 6. **HTTP协议特性**:服务器可能使用了chunked编码(一...

    commons-httpclient-3.1jar包

    《Apache Commons HttpClient 3.1详解》 Apache Commons HttpClient 是一个功能强大的Java库,专为实现客户端HTTP通信而设计。这个3.1版本是HttpClient的一个重要里程碑,它提供了丰富的功能和改进,使得开发者能够...

    httpclient-4.5.12-API文档-中文版.zip

    Maven坐标:org.apache.httpcomponents:httpclient:4.5.12; 标签:apache、httpcomponents、httpclient、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档...

    httpclient-4.5.13-API文档-中文版.zip

    Maven坐标:org.apache.httpcomponents:httpclient:4.5.13; 标签:apache、httpcomponents、httpclient、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档...

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

    《JAVA中使用HttpClient:commons-httpclient-3.0.jar详解》 在JAVA开发中,进行HTTP请求时,Apache的HttpClient库是一个不可或缺的工具。本文将深入解析`commons-httpclient-3.0.jar`,它是HttpClient的一个重要...

    HttpClient依赖jar包.zip

    本资源"HttpClient依赖jar包.zip"包含了实现这些功能所需的jar文件,使得开发者能够方便地在Java项目中集成HttpClient库。 HttpClient库的核心功能包括: 1. **发起HTTP/HTTPS请求**:HttpClient允许开发者发送...

    httpclient-4.5jar包

    《HttpClient 4.5详解与应用实践》 HttpClient是一个开源的Java库,由Apache软件基金会维护,主要用于在HTTP协议上实现客户端的通信。版本4.5是HttpClient的一个稳定版本,提供了许多增强的功能和优化,使其成为...

    httpclient-4.5.13-API文档-中英对照版.zip

    Maven坐标:org.apache.httpcomponents:httpclient:4.5.13; 标签:apache、httpcomponents、httpclient、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览...

    可用org.apache.commons.httpclient-3.1.0.jar.zip

    import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods....

    commons-httpclient3.1.jar,commons-codec1.3.jar,commons-logging1.1.1.jar

    标题中的"commons-httpclient3.1.jar,commons-codec1.3.jar,commons-logging1.1.1.jar"指的是三个关键的Java库文件,它们是Apache HttpClient项目的一部分,用于在Java应用程序中实现HTTP通信。这些JAR(Java ...

    org.apache.commons.httpclient-3.1.jar

    《Apache Commons HttpClient 3.1:HTTP客户端编程的基石》 ...然而,需要注意的是,HttpClient 3.1已不再维护,最新的稳定版本为HttpClient 4.x,对于新项目建议使用更现代的版本以获取更好的性能和兼容性。

    httpClient实例httpClient调用 http/https实例 忽略SSL验证

    HttpResponse response = httpClient.execute(request); ``` 现在,我们转向主题——忽略SSL验证。在生产环境中,SSL验证是必须的,以确保数据传输的安全性。但在开发或测试环境中,我们可能需要绕过这一环节。...

    httpclient-4.5jar

    httpclient-4.5所需jar包,里面包含httpclient-4.5.jar等等10个必须的开发包。 1.commons-codec-1.9.jar 2.commons-logging-1.2.jar 3.fluent-hc-4.5.jar 4.httpclient-4.5.jar 5.httpclient-cache-4.5.jar 6....

    httpclient-4.5.5-API文档-中文版.zip

    赠送jar包:httpclient-4.5.5.jar; 赠送原API文档:httpclient-4.5.5-javadoc.jar; 赠送源代码:httpclient-4.5.5-sources.jar; 包含翻译后的API文档:httpclient-4.5.5-javadoc-API文档-中文(简体)版.zip ...

    HttpClientUtil:一个Http请求使用HttpClient访问服务器,我们也可以上传文件到服务器,比如文件或图片。它提供接口来更新你的上传进度

    - 创建 HttpClient 实例:首先,我们需要创建一个 HttpClient 实例,这可以通过 HttpClientBuilder 或直接使用 HttpClients.createDefault() 方法完成。 - 创建请求:然后,我们需要构造一个 HttpRequestBase 对象...

    ribbon-httpclient-2.2.5.jar

    ribbon-httpclient-2.2.5.jar

    JMeter入门:Java Request实例

    **JMeter入门:Java Request实例** Apache JMeter是一款强大的性能测试工具,主要用于Web应用的压力测试。它是一款开源软件,遵循Apache License 2.0协议,适用于多种操作系统,如Windows、Linux和Mac OS等。JMeter...

    HttpClient 3.1 Jar包

    同时,注意 HttpClient 3.x 已经被HttpClient 4.x 和 HttpClient 5.x 取代,新版本提供了更多的功能和优化,更符合现代网络环境的需求。 在实际开发中,你可以参考指定的博客链接(http://blog.csdn.net/homebei2)...

    httpclient4.0 使用帮助、例子

    CloseableHttpResponse response = httpClient.execute(request); // 处理响应... ``` 2. POST请求(JSON数据): ```java String json = "{\"key\":\"value\"}"; HttpPost request = new HttpPost(...

    httpClient组合包.zip

    此外,HttpClient还支持异步操作,可以在多线程环境中高效地处理并发请求。 2. **httpcore-4.4.12.jar**:这是HttpClient的核心库,包含了HTTP协议的基本组件,如连接管理、请求和响应模型、编码器和解码器等。...

Global site tag (gtag.js) - Google Analytics