httclient假死,卡在httpClient.execute

       这几天写了一个爬虫,使用的是HttpClient,但是在爬的时候,总会出现爬到中途,程序就停在那,不往下爬了,也不报错,并且每次停止的位置也不一样,很是奇怪,于是进行debug发现是卡在了httpClient.execute这里,再深入发现是卡在了SocketInputStream类的socketRead0方法这里。

其实问题就是请求不到数据,一直卡在这,可能是由于请求过于频繁或者是网络问题。加上一个超时的限制就行了,加上以后,如果请求超时,重新请求即可。

主要是修改一下httpclent的配置。

        int socketTimeout = 15000;//读取数据超时
        int connectTimeout = 15000;//链接超时
       
        SocketConfig socketConfig = SocketConfig.custom()
                .setSoKeepAlive(false)
                .setSoLinger(1)
                .setSoReuseAddress(true)
                .setSoTimeout(10000)
                .setTcpNoDelay(true).build();
        RequestConfig config = RequestConfig.custom()
                .setConnectTimeout(connectTimeout).setSocketTimeout(socketTimeout)
                .setConnectionRequestTimeout(connectTimeout).build();
        CloseableHttpClient httpClient = HttpClientBuilder.create()
                .setDefaultSocketConfig(socketConfig)
                .setDefaultRequestConfig(config).build();

       /* HttpClient httpClient = HttpClients.custom()
                .setDefaultRequestConfig(RequestConfig.custom()
                        .setCookieSpec(CookieSpecs.STANDARD).build())
                .build();*/

用这种方法来创建HttpClient即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员万万

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值