java网络爬虫连接超时解决实例代码
作者:sober_qianyang 发布时间:2022-02-02 06:57:28
标签:java,爬虫,超时
本文研究的主要是java网络爬虫连接超时的问题,具体如下。
在网络爬虫中,经常会遇到如下报错。即连接超时。针对此问题,一般解决思路为:将连接时间、请求时间设置长一下。如果出现连接超时的情况,则在重新请求【设置重新请求次数】。
Exception in thread "main" java.net.ConnectException: Connection timed out: connect
下面的代码便是使用httpclient解决连接超时的样例程序。直接上程序。
package daili;
import java.io.IOException;
import java.net.URI;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.cookie.BasicClientCookie2;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
/*
* author:合肥工业大学 管院学院 钱洋
*1563178220@qq.com
*/
public class Test1 {
public static void main(String[] args) throws ClientProtocolException, IOException, InterruptedException {
getRawHTML("http://club.autohome.com.cn/bbs/forum-c-2098-1.html#pvareaid=103447");
}
public static String getRawHTML ( String url ) throws ClientProtocolException, IOException, InterruptedException{
//初始化
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter("http.protocol.cookie-policy",
CookiePolicy.BROWSER_COMPATIBILITY);
//设置参数
HttpParams params = httpclient.getParams();
//连接时间
HttpConnectionParams.setConnectionTimeout(params, 6000);
HttpConnectionParams.setSoTimeout(params, 6000*20);
//超时重新请求次数
DefaultHttpRequestRetryHandler dhr = new DefaultHttpRequestRetryHandler(5,true);
HttpContext localContext = new BasicHttpContext();
HttpRequest request2 = (HttpRequest) localContext.getAttribute(
ExecutionContext.HTTP_REQUEST);
httpclient.setHttpRequestRetryHandler(dhr);
BasicCookieStore cookieStore = new BasicCookieStore();
BasicClientCookie2 cookie = new BasicClientCookie2("Content-Type","text/html;charset=UTF-8");
BasicClientCookie2 cookie1 = new BasicClientCookie2("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36");
cookieStore.addCookie(cookie);
cookieStore.addCookie(cookie1);
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
HttpGet request = new HttpGet();
request.setURI(URI.create(url));
HttpResponse response = null;
String rawHTML = "";
response = httpclient.execute(request,localContext);
int StatusCode = response.getStatusLine().getStatusCode();
//获取响应状态码
System.out.println(StatusCode);
if(StatusCode == 200){
//状态码200表示响应成功
//获取实体内容
rawHTML = EntityUtils.toString (response.getEntity());
System.out.println(rawHTML);
//输出实体内容
EntityUtils.consume(response.getEntity());
//消耗实体
} else {
//关闭HttpEntity的流实体
EntityUtils.consume(response.getEntity());
//消耗实体
Thread.sleep(20*60*1000);
//如果报错先休息30分钟
}
httpclient.close();
System.out.println(rawHTML);
return rawHTML;
}
}
结果:
来源:http://blog.csdn.net/qy20115549/article/details/54973952
0
投稿
猜你喜欢
- Java 异步实现的几种方式1. jdk1.8之前的Futurejdk并发包里的Future代表了未来的某个结果,当我们向线程池中提交任务的
- 无论是我们在使用word还是记事本,系统都会为我们提供撤销的功能,这几乎是人人都会使用到的功能,而在我们实际开发中,会不会存在一个很复杂的对
- 一、概念 工厂方法模式是类的创建模式,又叫虚
- 前言本文,将介绍如何通过Java后端程序代码在PDF中创建工具提示。添加工具提示后,当鼠标悬停在页面上的元素时,将显示工具提示内容。导入ja
- 程序目的从java字节码层理解,为何i = i++后,结果是+1之前的数值。而i=++i后,结果是+1之后的值。关键指令iload_<
- 这篇文章主要介绍了JAVA泛型的继承和实现、擦除原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 使用BufferedReader(缓存读取流)可以每次读取文件的一行。对于文件内容如果是按行为单位排列的话,则使用BufferedReade
- 1. 插入排序步骤:1.从第一个元素开始,该元素可以认为已经被排序2.取下一个元素tem,从已排序的元素序列从后往前扫描3.如果该元素大于t
- 浅谈java内存模型 不同的平台,内存模型是不一样的,但是jvm的
- 自定义注解方式防止前端同一时间多次重复提交一、 前情提要有这样一个业务,上课的时候老师给表现好的学生送小花花,每节课都能统计出某个学生收到的
- 介绍这里学习SpringSecurity,对SpringSecurity进行学习。基本用法添加依赖<dependency> &n
- 本文实例为大家分享了Java实现图书借阅系统的具体代码,供大家参考,具体内容如下为图书阅览室开发一个图书借阅系统,最多可存50本图书,实现图
- 概述从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章.贪心算法贪心算法 (Greedy Algorithm)
- 本文实例为大家分享了Java手写线程池的实现代码,供大家参考,具体内容如下1.线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在
- 添加jar包这里的Scala不是maven工程所以要找到项目结构(快捷键:同时按住Ctrl+shift+Alt+s)在模块里面添加添加MyS
- 前言回调的核心就是回调方将本身即this传递给调用方,这样调用方就可以在调用完毕之后告诉回调方它想要知道的信息。1、什么是回调软件模块之间总
- 目标&背景我们以“处理订单数据”为例,假设我们的应用是一个分布式应用,有"订单应用","物流应用&qu
- 我们知道hibernate的核心就是对数据库的操作,里面的核心接口就是org.hibernate.Session接口。要想对数据库操作我们就
- Java序列化是什么?Java序列化是指把Java对象转换为字节序列的过程,Java反序列化是指把字节序列恢复为Java对象的过程。反序列化
- ServletWebServerApplicationContext实现了父类AbstractApplicationContext的onRe