Python 请求中URL超过最大重试次数

Python 请求中URL超过最大重试次数,python,python-requests,Python,Python Requests,我正在尝试获取以下内容: 当我用(0,2)尝试范围时,它可以工作,但当我将范围放入100s时,它会显示此错误: Traceback (most recent call last): File "/home/preetham/Desktop/eg.py", line 17, in <module> page1 = requests.get(ap) File "/usr/local/lib/python2.7/dist-packages/requests/api.py",

我正在尝试获取以下内容:

当我用
(0,2)
尝试
范围时,它可以工作,但当我将
范围
放入
100
s时,它会显示此错误:

Traceback (most recent call last):
  File "/home/preetham/Desktop/eg.py", line 17, in <module>
    page1 = requests.get(ap)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 383, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 486, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 378, in send
    raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='itunes.apple.com', port=443): Max retries exceeded with url: /in/app/adobe-reader/id469337564?mt=8 (Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known)
回溯(最近一次呼叫最后一次):
文件“/home/preetham/Desktop/eg.py”,第17行,在
page1=请求。获取(ap)
文件“/usr/local/lib/python2.7/dist-packages/requests/api.py”,get中第55行
返回请求('get',url,**kwargs)
文件“/usr/local/lib/python2.7/dist-packages/requests/api.py”,请求中的第44行
return session.request(method=method,url=url,**kwargs)
文件“/usr/local/lib/python2.7/dist packages/requests/sessions.py”,请求中第383行
resp=自我发送(准备,**发送)
文件“/usr/local/lib/python2.7/dist packages/requests/sessions.py”,第486行,在send中
r=适配器.send(请求,**kwargs)
文件“/usr/local/lib/python2.7/dist-packages/requests/adapters.py”,第378行,在send中
升起连接器错误(e)
requests.exceptions.ConnectionError:HTTPSConnectionPool(host='itunes.apple.com',port=443):url:/in/app/adobe reader/id469337564?mt=8超过最大重试次数(原因:[Errno-2]名称或服务未知)

这里发生的事情是,itunes服务器拒绝了您的连接(您在短时间内从同一ip地址发送了太多请求)

url:/in/app/adobe reader/id469337564?mt=8时超过最大重试次数

错误跟踪是误导性的,它应该类似于“无法建立连接,因为目标计算机主动拒绝它”

Github的python.requests lib有一个问题,请查看

要克服此问题(与其说是一个问题,不如说是一个误导性的调试跟踪),您应该捕获与连接相关的异常,如下所示:

try:
    page1 = requests.get(ap)
except requests.exceptions.ConnectionError:
    r.status_code = "Connection refused"
克服此问题的另一种方法是,如果您使用足够的时间间隔向服务器发送请求,则可以通过python中的
sleep(timeinset)
函数来实现(不要忘记导入sleep)

总括请求是很棒的python库,希望它能解决您的问题。

只要这样做

粘贴以下代码以代替
page=requests.get(url)


不客气:)

pip安装pyopenssl
似乎为我解决了这个问题


只需使用
请求“
功能:

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry


session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)

session.get(url)
这将
获取
URL,并在出现
请求时重试3次。异常。ConnectionError
<代码>退避系数将有助于在尝试之间应用延迟,以避免在定期请求配额的情况下再次失败


看看,它有许多简化重试的选项。

实现异常处理总是好的。它不仅有助于避免脚本意外退出,还可以帮助记录错误和信息通知。在使用Python请求时,我更喜欢捕捉如下异常:

    try:
        res = requests.get(adress,timeout=30)
    except requests.ConnectionError as e:
        print("OOPS!! Connection Error. Make sure you are connected to Internet. Technical Details given below.\n")
        print(str(e))            
        renewIPadress()
        continue
    except requests.Timeout as e:
        print("OOPS!! Timeout Error")
        print(str(e))
        renewIPadress()
        continue
    except requests.RequestException as e:
        print("OOPS!! General Error")
        print(str(e))
        renewIPadress()
        continue
    except KeyboardInterrupt:
        print("Someone closed the program")

这里的RenewiPAddress()是一个用户定义函数,如果IP地址被阻止,它可以更改IP地址。您可以不使用此函数。

我遇到了类似的问题,但以下代码对我有效

url = <some REST url>    
page = requests.get(url, verify=False)
url=
page=requests.get(url,verify=False)

“verify=False”禁用SSL验证。可以像往常一样添加Try-and-catch。

为此请求添加标题

headers={
'Referer': 'https://itunes.apple.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}

requests.get(ap, headers=headers)

在编写selenium浏览器测试脚本时,在使用JS api调用之前调用
driver.quit()
时遇到了这个错误。请记住,退出webdriver是最后一件事

为那些将来经历过这种情况的人添加我自己的经验。我的具体错误是

Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'
HTTPSConnectionPool(host, port=443): Max retries exceeded with url (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))

事实证明,这实际上是因为我已经达到了系统上打开文件的最大数量。它与失败的连接无关,甚至与所指出的DNS错误无关。

即使在安装pyopenssl并尝试各种python版本后(虽然它在mac上运行良好),我也无法在windows上运行它,因此我切换到urllib,它在python 3.6(来自python.org)和3.7(anaconda)上运行


在公司环境中指定代理为我解决了这个问题。

page = requests.get("http://www.google.com:80", proxies={"http": "http://111.233.225.166:1234"})
完全错误是:

requests.exceptions.ConnectionError:HTTPSConnectionPool(host='www.google.com',port=80):url:/(由NewConnectionError引起)(':无法建立新连接:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应”)


加上我自己的经验:

r = requests.get(download_url)
当我试图下载url中指定的文件时

错误是

Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'
HTTPSConnectionPool(host, port=443): Max retries exceeded with url (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')])")))
我通过在函数中添加
verify=False
对其进行了更正,如下所示:

r = requests.get(download_url + filename)
open(filename, 'wb').write(r.content)

检查您的网络连接。我有这个问题,VM没有正确的网络连接。

我在浏览器中运行路由时也有同样的错误,但在postman中,它工作正常。我的问题是,在查询字符串之前的路由之后没有
/


127.0.0.1:5000/api/v1/search/?location=Madina
search
对我有效后,提出错误并删除

只是
导入时间
url = <some REST url>    
page = requests.get(url, verify=False)
并加上:

time.sleep(6)
在for循环中的某个位置,以避免在短时间内向服务器发送太多请求。 数字6的意思是:6秒。
继续从1开始测试数字,直到达到有助于避免问题的最短秒数。

您不应该在
中的某个地方为
使用
i
变量吗?
?您就像是请求同一个应用程序100次一样。这是干什么用的?我在代码的其余部分使用I。我没有发布完整的代码,我没有要求相同的应用程序100次。我正在请求同一类别下的100个不同应用。看起来您的DNS解析程序无法解析
itunes.apple.com
。你能按你的命令运行
dig itunes.apple.com
time.sleep(6)