Python Requests 频繁请求网站时返回“[Errno 104] Connection reset by peer”错误的解决方法

今天在部署一个 Python 代码的时候发现遇到了问题,主要是用 requests 这个库请求一个网页。这份代码在其他的服务器上没有问题,但是换了个服务器发现每次运行都会报错,具体错误忘了记录了,反正最后会提示“[Errno 104] Connection reset by peer”这个错误。尝试了几次之后,发现问题依然存在,又去原来的服务器尝试了一下,发现还是没有问题,这就很奇怪了,网上搜了一下,感觉是新的服务器请求太频繁被对方服务器封了,也可能是新的服务器本身 IP 就之前被拉黑过?总之解决方法比较简单,请求的不那么频繁就行了。

一、代码描述

import requests

for url in urls:
    try:
        r = requests.get(url).content
        save_image(r)
    except Exception, e:
        print str(e)

这段代码是网上看到的,基本就是这么个意思,反正就是频繁请求一个网站。

二、解决方案

解决方法也很简单,import time 之后加上一个 time.sleep() 放慢请求速度即可。

import requests
import time

for url in urls:
    for i in range(10):
        try:
            r = requests.get(url).content
        except Exception, e:
            if i >= 9:
                do_some_log()
            else:
                time.sleep(0.5)
        else:
            time.sleep(0.1)
            break

     save_image(r)

参考文献:

  • https://blog.csdn.net/imnisen1992/article/details/53165112
  • https://segmentfault.com/a/1190000007480913

目前对我来说这个解决方案是有效的,大家如果还是不行,可以另寻他法。


【AD】炭云:768元/年/1GB内存/20GB SSD空间/2TB流量/500Mbps-1Gbps端口/独立IPv4/KVM/广州移动

【AD】美国洛杉矶CN2 VPS/香港CN2 VPS/日本CN2 VPS推荐,延迟低、稳定性高、免费备份_搬瓦工vps