首页
学习
活动
专区
圈层
工具
发布

HttpClient(二)HttpClient使用Ip代理与处理连接超时

5的时候,就重新爬取 代理IP 来保存到链表中。...1.5、HttpClient连接超时及读取超时   httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间;   1)HttpClient连接时间     所谓连接的时候 是HttpClient...发送请求的地方开始到连接上目标url主机地址的时间,理论上是距离越短越快,     线路越通畅越快,但是由于路由复杂交错,往往连接上的时间都不固定,运气不好连不上,HttpClient的默认连接时间,据我测试...2)HttpClient读取时间     所谓读取的时间 是HttpClient已经连接到了目标服务器,然后进行内容数据的获取,一般情况 读取数据都是很快速的,     但是假如读取的数据量大,或者是目标服务器本身的问题...HttpClient给我们提供了一个RequestConfig类 专门用于配置参数比如连接时间,读取时间以及前面讲解的代理IP等。

2.9K80

HttpComponents HttpClient连接池(5)-可用性检查

在上一篇文章里我们介绍了 httpclient 连接池中连接的重用,以及连接的 keep alive ,在这里我们主要介绍连接的可用性检查。...连接的可用性检查 对于 httpclient 连接池中的连接是可复用的,但是会存在这种情况,就是当我们从连接池中申请到连接的时候,很有可能连接不可用。...比方说远端 server 关闭了连接,这样的话连接就不可用了。...httpclient 提供了连接可用性检查机制,主要涉及了以下几个关键点: 何时进行可用性检查 如何进行可用性检查 可用性检查之后的处理 何时进行可用性检查 httpclient 在得到连接之后,...在MainClientExec 的 execute() 方法使用连接之前,会检查连接是否 open ,如果没有打开则调用 establishRoute() 方法重新建立连接。

2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Http 持久连接与 HttpClient 连接池

    四、HttpClient如何生成持久连接 HttpClien中使用了连接池来管理持有连接,同一条TCP链路上,连接是可以复用的。HttpClient通过连接池的方式进行连接持久化。...,不过我们看HttpClient源码主要关注两点: 连接池的具体设计方案,以供以后自定义连接池参考 如何与HTTP协议对应上,即理论抽象转为代码的实现 4.1 HttpClient连接池的实现 HttpClient...在上一章中,我们看到了HttpClient通过连接池来获得连接,当需要使用连接的时候从池中获得。...六、HttpClient如何清理过期连接 在HttpClient4.4版本之前,在从连接池中获取重用连接的时候会检查下是否过期,过期则清理。...,才会清理连接池中的连接 HttpClient4.4之后的版本通过一个死循环线程清理过期与空闲连接,该线程每次执行都sleep一会,以达到定期执行的效果 上面的研究是基于HttpClient源码的个人理解

    2.7K30

    HttpComponents HttpClient连接池(6)-连接清理

    在上一篇文章里我们介绍了 httpclient 连接池中连接的可用性检查,在这里我们主要介绍空闲 http 连接的清理。...对于连接池中的连接基本都是复用的,其中避免不了 server 端主动关闭连接,这个时候取出的连接自然是不可用的,当然可以通过上一篇文章中的可用性检查避免。...但同时 httpclient 连接池也提供了 http 连接的清理策略,用来对连接进行清除。...http 连接的清理主要涉及了以下几个关键点: 如何开启连接清理 如何进行连接清理 如何开启连接清理 连接池中空闲连接的清理由 HttpClientBuilder 的 evictIdleConnections...目前先写到这里,下一篇我们开始介绍 httpclient 连接池请求的 retry 和 ssl 的支持。

    3.6K40

    Http 持久连接与 HttpClient 连接池

    HttpClient 如何生成持久连接 HttpClient 中使用了连接池来管理持有连接,同一条 TCP 链路上,连接是可以复用的。HttpClient 通过连接池的方式进行连接持久化。...,不过我们看 HttpClient 源码主要关注两点: 连接池的具体设计方案,以供以后自定义连接池参考 如何与 HTTP 协议对应上,即理论抽象转为代码的实现 HttpClient 连接池的实现 HttpClient...在上一章中,我们看到了 HttpClient 通过连接池来获得连接,当需要使用连接的时候从池中获得。...HttpClient 如何清理过期连接 在 HttpClient4.4 版本之前,在从连接池中获取重用连接的时候会检查下是否过期,过期则清理。...,才会清理连接池中的连接 HttpClient4.4 之后的版本通过一个死循环线程清理过期与空闲连接,该线程每次执行都 sleep 一会,以达到定期执行的效果 上面的研究是基于 HttpClient 源码的个人理解

    2.1K20

    HttpComponents HttpClient连接池(9)-长连接

    在上一篇文章里我们介绍了 httpclient 连接池对于 SSL 的支持,这里主要介绍连接池中的长连接。...根据以前文章, 对于httpclient 连接池中的池化对象 CpoolEntry 都是可以被复用的,这样在每次申请连接的时候都会从可用连接集合 available 中获取,避免每次都重新创建连接,提高了效率...对于服务端可能主动关闭了这个连接,这个时候 httpclient 中的这个连接就为 close_wait 状态,下次申请到的时候是不可用的。...但是这样做并不优雅,当服务端把大量的连接关闭, httpclient 连接池中就有大量的 close_wait 状态的连接,属于未释放资源。...目前先写到这里,在下一篇文章里我们总结一下 httpclient 连接池的使用建议。

    1.8K30

    HttpComponents HttpClient连接池(7)-重试

    在上一篇文章里我们介绍了 httpclient 连接池中空闲连接的清理,在这里我们主要介绍 http 连接的重试机制。...http连接的重试 httpclient 连接池也支持请求的重试,即在请求失败的情况下进行重试,对于重试设计以下几个关键点。...如何开启重试 如何定义重试次数 如何进行重试 如何开启重试 在 httpclient 连接池中,连接发送请求的重试是由 HttpRequestRetryHandler 类型的对象来处理,在HttpClientBuilder...然后对于HttpClientBuilder 在构建 httpclient 的时候会根据这设置来确定 HttpRequestRetryHandler ,核心代码如下: if (!...目前先写到这里,在下一篇文章里我们开始介绍 httpclient 连接池对于 ssl 支持。

    2.1K20

    HttpComponents HttpClient连接池(2)-连接的申请

    在上一篇文章里我们主要介绍了 httpclient 连接池的关键类和数据结构,在这里我们主要介绍http连接的申请和释放。...http连接的申请 http 连接的申请主要调用上一篇文章 Cpool 对象(在父类AbstractConnPool)的 lease() 方法,该方法会返回 Future 对象,...global 连接池和 individual 连接池的正在使用集合 leased 里。...如果上述步骤中已经超过了连接池的限制,那么把请求对象分别加入 global 连接池和 individual 连接池的请求集合 pending 里。然后利用对象锁,使当前线程在该锁上等待。...如果被其他线程唤醒,意味着有可用连接释放到池中,然后继续循环以上各个步骤尝试获取连接。

    1.5K40

    HttpComponents HttpClient连接池(1)-结构

    在我们平时进行 http调用的时候经常使用apache httpclient这个组件,它提供了http连接池管理,这里我们对它的实现做分析。...对于比较老的httpclient 版本(3.x)建议不要使用,这里我们基于http components httpclient 4.5.9版本,包括一下内容: httpclient连接池的关键类和数据结构...httpclient 关键类和数据结构 CPool 代表 httpclient连接池,其里面存放 CpoolEntry 类型对象作为池化item,该对象包含ManagedHttpClientConnection...类型对象,ManagedHttpClientConnection包装原始java socket作为http连接: CPool==>httpclient 连接池 CPoolEntry==>连接池中的 item...这个对象也是一个连接池,既在 httpclient 连接池里,对每一个 route 访问都独立建立各自的连接池,从而实现不同 route 访问连接池隔离。

    1.7K40

    HttpClient技术

    获取响应的状态码 5、获取响应的内容 6、关闭连接 /** * get请求不带参数 * @throws ClientProtocolException * @throws IOException...3、发送请求,并返回响应 4、处理响应, 获取响应的状态码 5、获取响应的内容 6、关闭连接 /** * get请求带参数 * */ public static void deGetParam...对象 2、创建 post 请求对象,在请求中输入url 3、发送请求,并返回响应 4、处理响应, 获取响应的状态码 5、获取响应的内容 6、关闭连接 /** * post请求不带参...对象 2、创建 post 请求对象,在请求中输入url 3、给定参数,将参数转换成字符串,并在post 请求中绑定参数 3、发送请求,并返回响应 4、处理响应, 获取响应的状态码 5、获取响应的内容...对象 2、创建 post 请求对象,在请求中输入url 3、创建一个json字符串,将其放入StringEntity中,指定类型,并在post 请求中绑定该字符串 4、发送请求,并返回响应 5、

    2K32

    HttpComponents HttpClient连接池(3)-连接的释放

    在上一篇文章里我们介绍了 httpclient 连接池中连接的申请,在这里我们主要介绍连接的和释放。...http连接的释放 httpclient 连接池中连接对象的释放主要涉及了ConnectionHolder 对象实例的 releaseConnection() 方法,PoolingHttpClientConnectionManager...对于 Cpool 的 release() 方法,首先从 global 连接池正在使用连接集合leased 中移除当前 CpoolEntry ,如果重用则加入 global 连接池可用连接集合 available...个人觉得在连接申请和释放的时候还有一定的优化空间,申请连接的时候,当连接池中不能申请到可用连接,会把当前线程在对象 condition 上等待,对象 condition 是 global 连接池 Cpool...这时如果 domain-a.com 以前的请求归还连接,那么会同时唤醒两线程,thread-a 是可以获得连接的,因为有连接归还。

    1.8K30

    HttpClient(一)HttpClient抓取网页基本信息

    一、HttpClient简介   HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,   并且它支持...HttpClient 已经应用在很多的项目中,   比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。...现在HttpClient最新版本为 HttpClient 4.5 (GA) (2015-09-11)。   ...二、使用HttpClient获取网页内容   这里我们来抓取博客园首页的源码内容 package com.jxlg.study.httpclient; import org.apache.http.HttpEntity.../HTTPClient/0.3-3/HTTPClient-0.3-3.jar   运行输出:     Content-Type:application/java-archive   当然Content-Type

    1.9K80

    httpclient连接池管理,你用对了?

    如上代码2我们基于连接池管理器创建了一个httpClient对象,下面我们就可以使用它发起http请求了。...()); //4.发起请求 response = httpClient.execute(httpGet); //5.成功则解析结果 if (200 == response.getStatusLine...e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { //5....代码4则发起http请求,代码5发现请求OK,则使用自带工具类EntityUtils.toString解析返回值(内部读取流结束后,会自动返还链接到连接池) 代码5则当请求结束后做一个兜底链接归还(如果返回状态值不是...对于过期链接的处理,当Tomcat主动关闭链接时,httpclient 4.4之前是每次在复用链接前进行检查链接是否可用,http4.4后,是自上次使用连接以来所经过的时间超过已设置的超时时(默认超时设置为

    5.2K10

    httpClient连接池管理,你用对了?

    如上代码2我们基于连接池管理器创建了一个httpClient对象,下面我们就可以使用它发起http请求了。...()); //4.发起请求 response = httpClient.execute(httpGet); //5.成功则解析结果 if (200 == response.getStatusLine...e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { //5....代码4则发起http请求,代码5发现请求OK,则使用自带工具类EntityUtils.toString解析返回值(内部读取流结束后,会自动返还链接到连接池) 代码5则当请求结束后做一个兜底链接归还(如果返回状态值不是...对于过期链接的处理,当Tomcat主动关闭链接时,httpclient 4.4之前是每次在复用链接前进行检查链接是否可用,http4.4后,是自上次使用连接以来所经过的时间超过已设置的超时时(默认超时设置为

    2.2K20

    HttpComponents HttpClient连接池(10)-使用建议

    在以前文章里我们分别介绍了 httpclient 连接池的连接的申请,连接的释放,连接的重用,连接的 keep alive ,连接的可用性检查,空闲连接的清理,请求的 retry ,ssl 请求的支持,...长连接的支持等。...对于 httpclient 连接池使用一般考虑以下几点: 向连接池申请连接的超时时间 连接建立的超时时间,即 socket 进行 3 次握手建立连接的超时时间 连接超时时间,即 socket 读写超时时间...设置最大 redirect 次数 是否开启可用性检查 global 连接池中最大的连接数 individual route 连接池中最大的连接数 请求重试次数 设置ssl 请求的证书 trust 策略和...另外我们也会经常使用 Spring 的 RestTemplate 来发送 https 请求,对于 RestTemplate 一般也是会去整合 Apache HttpComponents HttpClient

    3.4K20
    领券