`
dh189
  • 浏览: 135281 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

httpclient4 ThreadSafeClientConnManager 多线程程执行HTTP请求的例子

    博客分类:
  • java
阅读更多
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);
			}
		}

	}

}

 

分享到:
评论
3 楼 windking88 2012-06-29  
asima8106 写道
这个都不设置 setDefaultMaxPerRoute,这个程序写了有什么用

这个程序是apache给的示例程序,默认设置的2,为什么没有用?
2 楼 asima8106 2012-04-17  
这个都不设置 setDefaultMaxPerRoute,这个程序写了有什么用
1 楼 swingboat 2010-11-02  
有没有试过,用100个线程同时去run这个段程序,性能会怎么样?

相关推荐

    java HttpClient 发送GET请求和带有表单参数的POST请求教程例子

    Apache HttpClient库提供了一种强大的方法来执行HTTP请求,无论是简单的GET请求还是复杂的带有表单参数的POST请求。本文将通过具体的代码示例,详细介绍如何使用Java HttpClient来发送这两种类型的请求。 #### 二、...

    HttpClient发送http请求需要的jar包

    HttpClient是Apache基金会开发的一个Java库,用于执行HTTP请求。它为开发者提供了强大的功能,包括连接管理、重试策略、请求和响应处理等。在Java应用中,如果你需要发送HTTP请求,HttpClient是一个非常实用的选择。...

    http请求工具类HttpClientUtil,get,post请求(csdn)————程序.pdf

    此外,创建了一个静态的 `CloseableHttpClient` 实例 `client`,这是 HttpClient 的核心组件,负责执行 HTTP 请求。 2. **HttpClient 配置**: 使用 `HttpClients.custom().build()` 创建了一个自定义的 ...

    利用HttpClient发送HTTP请求

    利用HttpClient发送HTTP请求 利用HttpClient发送HTTP请求

    HttpClient包及例子

    HttpClient是Apache基金会开发的一个Java库,它为Java开发者提供了一种简单且强大的API来执行HTTP请求,无论是GET、POST还是其他HTTP方法。这个库的主要目标是简化与HTTP服务器的交互,使得开发人员能够轻松地创建...

    httpclient.post例子

    在Java编程中,Apache HttpClient库是一个非常常用的工具,用于执行HTTP请求,如GET、POST等。本示例将深入探讨如何使用HttpClient库实现POST请求。首先,我们需要理解POST请求的基本概念,它通常用于向服务器发送...

    对于C#(HttpClient)方式网络请求的封装

    标题中的“对于C#(HttpClient)方式网络请求的封装”是指使用C#编程语言,特别是通过HttpClient类来处理HTTP网络请求,并将这个过程进行抽象和封装,以便在多个地方重复使用。HttpClient是.NET Framework和.NET ...

    java使用HttpClient发送http请求

    注意,执行完请求后需要关闭响应和HttpClient以释放资源。 对于POST请求,你需要创建一个HttpPost对象,并设置请求体: ```java HttpPost httpPost = new HttpPost("http://example.com"); List&lt;NameValuePair&gt; ...

    httpclient发送post请求

    在Java开发中,HTTPClient库是一个非常常用的工具,用于执行HTTP请求,包括POST请求。本篇文章将深入探讨如何使用HTTPClient发送POST请求,以及相关的项目结构和实现细节。 首先,"post-demo"项目定义了我们需要...

    HttpClientUtil工具类发送get和post请求,支持http和https,支持发送文件

    HttpClient是Java中用于执行HTTP请求的一个强大库,它提供了丰富的功能,可以方便地进行GET、POST请求,并且能够处理复杂的网络交互,包括发送文件等操作。下面我们将详细讨论HttpClientUtil工具类如何实现这些功能...

    HttpClient发送http请求(post和get)需要的jar包+内符java代码案例+注解详解

    通过HttpClient,开发者可以方便地创建HTTP客户端,执行各种HTTP请求,包括GET、POST、PUT、DELETE等,并接收响应。在Java项目中,如果需要与Web服务交互,HttpClient是一个常见的选择。 1. **HTTP请求**:HTTP(超...

    HttpClient 4文件上传

    - `HttpClient`是Apache HttpClient提供的核心接口,用于执行HTTP请求并获取响应。 - 在本例中使用的是`DefaultHttpClient`类,它是`HttpClient`的一个具体实现。 2. **HttpPost**: - `HttpPost`是代表HTTP ...

    httpClient例子

    HttpClient是Apache基金会开发的一个Java库,它为Java程序员提供了一个强大的HTTP客户端接口,可以用于执行HTTP请求并处理响应。在本示例中,我们将深入探讨如何使用HttpClient进行POST和GET请求,以及如何设置代理...

    cocos2dx Http 网络请求 例子

    在这个"Cocos2dx Http 网络请求 例子"中,我们将深入探讨如何在Cocos2d-x环境下进行HTTP网络请求,包括GET和POST两种常见方法。 首先,我们需要理解HTTP协议的基础知识。HTTP(超文本传输协议)是互联网上应用最...

    httpclient用法,发送get和post请求,设置header

    httpclient的用法,发送get请求和post请求,设置header

    HttpClient 3.x to HttpComponents HttpClient 4.x

    在HttpClient 4.x中,执行这些HTTP方法的代码看起来会是这样: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet get = new HttpGet("***"); HttpPost post = new HttpPost("***");...

    HttpClient4模拟登录回贴

    HttpClient4是Apache软件基金会下的一个开源HTTP客户端库,它提供了强大的功能来执行HTTP请求并处理响应。这篇博客“HttpClient4模拟登录回贴”显然探讨了如何利用HttpClient4库进行网络模拟登录以及在特定网站上...

    httpClient4 最新帮助文档

    HttpClient 4 是一个由 Apache 软件基金会开发的Java库,用于执行HTTP请求并处理响应。这个库在Web服务和API交互、自动化测试、数据抓取等场景中广泛应用。最新帮助文档通常会涵盖HttpClient 4的主要功能、用法、...

Global site tag (gtag.js) - Google Analytics