0 0

httpclient4.1网页抓取的问题?5

最近,写了一个网页抓取的程序,其中使用到httpclient4.1,程序运行没有什么问题的。
但是查看流量监控时,发现请求总是出现比较规律的流量下降的情况,如图所示:



自己分析了半天也没有发现问题的原因,所以请教一下各位,帮忙看看,
代码如下:
/**
 * HttpClient 制造工厂
 * @author david.wang
 */
public class HttpClientFactory 
{
	private static Logger logger = LoggerFactory.getLogger(HttpClientFactory.class);
	
	private static ThreadSafeClientConnManager cm = null;
	
	private static HttpClient httpclient = null;  
	/**
	 * 初始化连接池
	 */
	static 
	{
		SchemeRegistry schemeRegistry = new SchemeRegistry();
		schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory
				.getSocketFactory()));
		schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory
				.getSocketFactory()));
		cm = new ThreadSafeClientConnManager(schemeRegistry);
		try 
		{
			int maxTotal = 200;// Integer.valueOf(ResourceUtil.getSystem("httpclient.max_total"));
			cm.setMaxTotal(maxTotal);
		} 
		catch (NumberFormatException e) 
		{
			logger.error("Key[httpclient.max_total] Not Found in systemConfig.properties", e);
		}
		// 每条通道的并发连接数设置(连接池)
		try 
		{
			int defaultMaxConnection = 50;// Integer.valueOf(ResourceUtil.getSystem("httpclient.default_max_connection"));
			cm.setDefaultMaxPerRoute(defaultMaxConnection);
		} 
		catch (NumberFormatException e) 
		{
			logger.error("Key[httpclient.default_max_connection] Not Found in systemConfig.properties", e);
		}
		
		HttpParams params = new BasicHttpParams();
		params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
		params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 3000); // 3000ms
		params.setParameter(CoreConnectionPNames.SO_TIMEOUT, 60000); // 5000ms
		//实例化一个httpclient
		httpclient = new DefaultHttpClient(cm, params);
	}

	/**
	 * 获取httpclient实例
	 * @return
	 */
	public static HttpClient getHttpClient() 
	{
		return httpclient;
	}

	/**
	 * 关闭整个连接池
	 */
	public static void shutdown() 
	{
		if (cm != null) 
		{
			cm.shutdown();
		}
	}
}


	public String httpClient(String url, String cookies) 
			throws ClientProtocolException, IOException
	{
		//从连接池获取链接
		HttpClient client = HttpClientFactory.getHttpClient();
		HttpGet get = new HttpGet(url);
		get.setHeader("Cookie", cookies);
		HttpResponse response = client.execute(get);
		HttpEntity entity = response.getEntity();
		String content = EntityUtils.toString(entity, "UTF-8");
		get.abort();//释放链接
		return content;
	}
		


多线程调用方法如下:
	con = this.httpClient(url, cookies);
2012年5月21日 15:17
  • 大小: 3.2 KB
目前还没有答案

相关推荐

    httpClient4.1入门教程

    HttpClient4.1是Apache Jakarta Commons的一个子项目,它为Java开发者提供了一套高效、功能...学习HttpClient4.1有助于开发者更好地实现与HTTP服务器的交互,无论是进行数据抓取、API调用还是其他复杂的网络通信任务。

    httpClient4.1入门教程.docx

    HttpClient 的灵活性和强大功能使其成为 Java 开发者处理 HTTP 任务的首选工具,无论是简单的网页抓取还是复杂的 Web 服务交互,HttpClient 都能提供稳定和高效的解决方案。随着 HTTP 协议的发展,HttpClient 也在...

    httpcomponents-client-4.1-bin.zip

    《Apache HttpClient 4.1详解》 Apache HttpClient是一款强大的HTTP客户端库,广泛应用于Java开发者之中,主要用于处理HTTP请求和...无论是在Web服务调用、数据抓取还是API集成等方面,HttpClient都能成为可靠的助手。

    httpclient相关的JAR包4.1.2

    标题中的“httpclient相关的JAR包4.1.2”指的是Apache HttpClient库的4.1.2版本。HttpClient是一个在Java环境中实现HTTP协议的开源库,它提供了丰富的API用于执行HTTP请求并处理响应。这个库广泛应用于需要通过HTTP...

    http-components-core-4.1-bin.zip

    2. **传输编码**:支持 chunked transfer coding 和 gzip compression,这些编码方式可以处理大体积的数据传输,避免了数据大小未知时的缓冲问题,并且可以提高传输效率。 3. **HTTP方法支持**:包括GET、POST、PUT...

    java模拟ie 访问web

    此外,`httpcomponents-client-4.1-bin.zip`中的库文件包含了HttpClient的实现,可以将其添加到项目依赖中,以便使用其功能。 总结,Java模拟IE访问Web主要涉及到对HTTP协议的理解、HttpClient库的使用,以及请求和...

    Java爬虫程序

    1. **网络请求库**:如Apache HttpClient或OkHttp,它们提供了发送HTTP请求、设置请求头、处理响应等功能,是爬虫获取网页内容的基础。 2. **HTML解析**:如Jsoup库,它能够解析HTML文档,提取所需信息,如链接、...

    Ajax全套学习教程

    5.2 SEO问题:由于Ajax加载的内容不在初次页面加载时发送,搜索引擎可能无法抓取。 5.3 用户体验:如果网络环境差,用户可能会看到页面部分加载的现象,需要合理设计加载提示。 六、现代前端框架中的Ajax 6.1 React...

    java爬虫教程及工具应用

    WebMagic是一款简单易用的Java爬虫框架,它能够快速地抓取网页数据,并自动抽取URL。 - **特点**: - 易于上手,适合初学者。 - 提供了强大的数据抽取功能。 #### 四、案例分析 为了更好地理解Java爬虫的实际...

    基于爬虫的美食推荐小程序设计与实现.docx

    网络爬虫是一种自动抓取网页信息的程序或脚本,通过模拟用户浏览网站的行为来抓取数据。在网络爬虫的设计中,通常需要考虑以下几个关键方面: - **网页请求与响应处理**:爬虫首先发送HTTP请求到目标服务器,服务器...

    HTTP Programming Recipes for C# Bots

    - **动态加载内容**:理解如何处理AJAX加载的内容,以便完整抓取页面数据。 - **执行JavaScript**:使用如Selenium WebDriver等工具执行页面上的JavaScript代码,实现更高级的功能。 ##### 4.6 伦理与法律问题 - **...

Global site tag (gtag.js) - Google Analytics