-
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
目前还没有答案
相关推荐
HttpClient4.1是Apache Jakarta Commons的一个子项目,它为Java开发者提供了一套高效、功能...学习HttpClient4.1有助于开发者更好地实现与HTTP服务器的交互,无论是进行数据抓取、API调用还是其他复杂的网络通信任务。
HttpClient 的灵活性和强大功能使其成为 Java 开发者处理 HTTP 任务的首选工具,无论是简单的网页抓取还是复杂的 Web 服务交互,HttpClient 都能提供稳定和高效的解决方案。随着 HTTP 协议的发展,HttpClient 也在...
《Apache HttpClient 4.1详解》 Apache HttpClient是一款强大的HTTP客户端库,广泛应用于Java开发者之中,主要用于处理HTTP请求和...无论是在Web服务调用、数据抓取还是API集成等方面,HttpClient都能成为可靠的助手。
标题中的“httpclient相关的JAR包4.1.2”指的是Apache HttpClient库的4.1.2版本。HttpClient是一个在Java环境中实现HTTP协议的开源库,它提供了丰富的API用于执行HTTP请求并处理响应。这个库广泛应用于需要通过HTTP...
2. **传输编码**:支持 chunked transfer coding 和 gzip compression,这些编码方式可以处理大体积的数据传输,避免了数据大小未知时的缓冲问题,并且可以提高传输效率。 3. **HTTP方法支持**:包括GET、POST、PUT...
此外,`httpcomponents-client-4.1-bin.zip`中的库文件包含了HttpClient的实现,可以将其添加到项目依赖中,以便使用其功能。 总结,Java模拟IE访问Web主要涉及到对HTTP协议的理解、HttpClient库的使用,以及请求和...
1. **网络请求库**:如Apache HttpClient或OkHttp,它们提供了发送HTTP请求、设置请求头、处理响应等功能,是爬虫获取网页内容的基础。 2. **HTML解析**:如Jsoup库,它能够解析HTML文档,提取所需信息,如链接、...
5.2 SEO问题:由于Ajax加载的内容不在初次页面加载时发送,搜索引擎可能无法抓取。 5.3 用户体验:如果网络环境差,用户可能会看到页面部分加载的现象,需要合理设计加载提示。 六、现代前端框架中的Ajax 6.1 React...
WebMagic是一款简单易用的Java爬虫框架,它能够快速地抓取网页数据,并自动抽取URL。 - **特点**: - 易于上手,适合初学者。 - 提供了强大的数据抽取功能。 #### 四、案例分析 为了更好地理解Java爬虫的实际...
网络爬虫是一种自动抓取网页信息的程序或脚本,通过模拟用户浏览网站的行为来抓取数据。在网络爬虫的设计中,通常需要考虑以下几个关键方面: - **网页请求与响应处理**:爬虫首先发送HTTP请求到目标服务器,服务器...
- **动态加载内容**:理解如何处理AJAX加载的内容,以便完整抓取页面数据。 - **执行JavaScript**:使用如Selenium WebDriver等工具执行页面上的JavaScript代码,实现更高级的功能。 ##### 4.6 伦理与法律问题 - **...