Java爬虫(六)-- httpClient进阶:超时时间设置+

2018-03-15  本文已影响0人  Richard_易

一、前言

本文主要介绍httClient超时时间设置,以及cookie保存策略设置。

二、超时时间设置

httpClient内部有三个超时时间设置:

指的是连接目标url的连接超时时间,即客服端发送请求到与目标url建立起连接的最大时间。如果在该时间范围内还没有建立起连接,则就
抛出connectionTimeOut异常。如测试的时候,将url改为一个不存在的url:"http://test.com",超时时间3000ms过后,系统报出异常:

org.apache.commons.httpclient.ConnectTimeoutException:The host did not accept the connection within timeout of 3000 ms

httpClient中的要用连接时尝试从连接池中获取,若是在等待了一定的时间后还没有获取到可用连接(比如连接池中没有空闲连接了)则会抛出获取连接超时异常。

设置超时时间的意义在于,让你知道在哪个地方出问题了。就比如如果请求返回超时,如果你没设置读取数据超时,程序就会一直卡在那个地方,也不会报错。

httpClient4.5版本之后,这几个参数的设置就集成抽象到了RequestConfig中,具体的例子如下:

RequestConfig defaultRequestConfig = RequestConfig.custom()
                .setSocketTimeout(10000)
                .setConnectTimeout(5000)
                .setConnectionRequestTimeout(5000)
                .build();

BasicCookieStore httpClient = HttpClients.custom()
                .setDefaultRequestConfig(defaultRequestConfig)
                .build();

cookie保存策略设置

CookieSpec接口代表了cookie管理的规范,cookie管理规范包含如下内容:

  1. 解析Set-Cookie头部的规则
  2. 验证已解析cookie的规则
  3. 为已给定主机,端口和源路径格式化Cookie头部

httpClient附带多种CookieSpec实现:

上面讲这么多估计大家也不会怎么看,会用到的主要是Standard strictStandardIgnore cookies也可能会用到。

如果对于cookie解析有定制化的要求,httpClient也允许我们自定义cookie策略。为了实现定制cookie策略,你应该创建一个自定义的CookieSpec接口的实现,创建一个CookieSpecProvider的实现类,然后用该实现类去创建和初始化自定义规范的实例,然后使用httpClient进行注册,一旦自定义规范被注册,它就会如同标准cookie规范一样被触发。

具体怎么做不在本篇文章中讲,等我遇到来添上。

怎么设置cookie策略的代码如下:

RequestConfig defaultRequestConfig = RequestConfig.custom()
    // 防止cookie reject 在新程序中,强烈建议使用Standard或Standard strict策略
                .setCookieSpec(CookieSpecs.STANDARD_STRICT) 
                .build();

BasicCookieStore httpClient = HttpClients.custom()
                .setDefaultRequestConfig(defaultRequestConfig)
                .build();

参考资料

  1. https://hc.apache.org/httpcomponents-client-ga/tutorial/html/statemgmt.html#d5e515
  2. http://blog.csdn.net/u011191463/article/details/78664896
上一篇下一篇

猜你喜欢

热点阅读