使用httpClient可模拟请求Url获取资源,使用单线程的请求速度上会有一定的限制,参考了Apache给出的例子,自己做了测试实现多线程并发请求,以下代码需要HttpClient 4.2的包,可以在http://hc.apache.org/downloads.cgi下载
1、并发请求
View Code
1 package generate.httpclient;
2
3 import java.util.List;
4 import java.util.concurrent.ExecutorService;
5 import java.util.concurrent.Executors;
6
7 import org.apache.http.HttpEntity;
8 import org.apache.http.HttpResponse;
9 import org.apache.http.client.HttpClient;
10 import org.apache.http.client.methods.HttpGet;
11 import org.apache.http.conn.ClientConnectionManager;
12 import org.apache.http.conn.params.ConnManagerParams;
13 import org.apache.http.conn.scheme.PlainSocketFactory;
14 import org.apache.http.conn.scheme.Scheme;
15 import org.apache.http.conn.scheme.SchemeRegistry;
16 import org.apache.http.impl.client.DefaultHttpClient;
17 import org.apache.http.impl.conn.PoolingClientConnectionManager;
18 import org.apache.http.params.BasicHttpParams;
19 import org.apache.http.params.HttpConnectionParams;
20 import org.apache.http.params.HttpParams;
21 import org.apache.http.protocol.BasicHttpContext;
22 import org.apache.http.protocol.HttpContext;
23 import org.apache.http.util.EntityUtils;
24
25 public class ThreadPoolHttpClient {
26 //线程池27 private ExecutorService exe = null;
28 //线程池的容量29 private static final int POOL_SIZE = 20;
30 private HttpClient client = null;
31 String[] urls=null;
32 public ThreadPoolHttpClient(String[] urls){
33 this.urls=urls;
34 }
35 public void test() throws Exception {
36 exe = Executors.newFixedThreadPool(POOL_SIZE);
37 HttpParams params =new BasicHttpParams();
38 /*从连接池中取连接的超时时间*/
39 ConnManagerParams.setTimeout(params, 1000);
40 /*连接超时*/
41 HttpConnectionParams.setConnectionTimeout(params, 2000);
42 /*请求超时*/
43 HttpConnectionParams.setSoTimeout(params, 4000);
44 SchemeRegistry schemeRegistry = new SchemeRegistry();
45 schemeRegistry.register(
46 new Scheme("http", 80