请求中的URL超出了最大重试次数

时间:2014-04-11 12:56:36

标签: python python-requests

我试图获取App Store > Business的内容:

import requests
from lxml import html

page = requests.get("https://itunes.apple.com/in/genre/ios-business/id6000?mt=8")
tree = html.fromstring(page.text)

flist = []
plist = []
for i in range(0, 100):
    app = tree.xpath("//div[@class='column first']/ul/li/a/@href")
    ap = app[0]
    page1 = requests.get(ap)

当我使用range (0,2)时,它可以正常运行,但是当我将range放入100时,它会显示此错误:

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)

15 个答案:

答案 0 :(得分:104)

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

  

网址超出最大重试次数:/ in / app / adobe-reader / id469337564?mt = 8

错误跟踪误导它应该是“无法建立连接,因为目标机器主动拒绝它”

关于Github的python.requests lib存在问题,请查看here

要克服这个问题(不是因为它会误导调试跟踪而引起的问题),你应该捕获与连接相关的异常,如下所示:

try:
    page1 = requests.get(ap)
except requests.exceptions.ConnectionError:
    r.status_code = "Connection refused"

另一种解决此问题的方法是,如果你使用足够的时间间隔向服务器发送请求,这可以通过python中的sleep(timeinsec)函数来实现(不要忘记导入睡眠)

from time import sleep

所有请求都是非常棒的python库,希望能解决你的问题。

答案 1 :(得分:27)

就这样做,

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

import time

page = ''
while page == '':
    try:
        page = requests.get(url)
        break
    except:
        print("Connection refused by the server..")
        print("Let me sleep for 5 seconds")
        print("ZZzzzz...")
        time.sleep(5)
        print("Was a nice sleep, now let me continue...")
        continue

欢迎你:)

答案 2 :(得分:18)

pip install pyopenssl似乎为我解决了这个问题。

https://github.com/requests/requests/issues/4246

答案 3 :(得分:2)

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

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

“ verify = False”禁用SSL验证。尝试捕获可以像往常一样添加。

答案 4 :(得分:1)

在编写硒浏览器测试脚本时,在使用JS api调用之前调用driver.quit()时遇到了此错误。请记住,退出网络驱动程序是最后要做的事情!

答案 5 :(得分:1)

即使安装了pyopenssl并尝试了各种python版本(尽管在Mac上运行良好)后,我仍无法使其在Windows上运行,所以我切换到urllib,并且在python 3.6(来自python .org)上工作, 3.7(anaconda)

import urllib 
from urllib.request import urlopen
html = urlopen("http://pythonscraping.com/pages/page1.html")
contents = html.read()
print(contents)

答案 6 :(得分:1)

在公司环境中指定代理可以为我解决该问题。

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 ]连接尝试失败,因为连接的一方在一段时间后未正确响应,或者建立的连接失败,因为连接的主机未能响应'))

答案 7 :(得分:1)

import time 并添加:

time.sleep(6)

for 循环中的某处,避免在短时间内向服务器发送过多请求。 数字 6 表示:6 秒。 保持测试数字从 1 开始,直到达到有助于避免问题的最短秒数。

答案 8 :(得分:0)

为此请求添加标题。

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)

答案 9 :(得分:0)

为以后遇到这种情况的人增加我自己的经验。我的具体错误是

Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known'

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

答案 10 :(得分:0)

增加我自己的经验:

r = requests.get(download_url)

当我尝试下载url中指定的文件时。

错误是

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)

答案 11 :(得分:0)

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

答案 12 :(得分:0)

在浏览器中运行路由时出现相同的错误,但是在邮递员中,它运行正常。我的问题是,查询字符串之前的路由之后没有/

127.0.0.1:5000/api/v1/search/?location=Madina引发错误,并在/为我工作之后删除了search

答案 13 :(得分:0)

也可能是网络配置问题。因此,为此您需要重新配置您的网络配置。

对于 Ubuntu: 须藤vim /etc/network/interfaces

在 dns-nameserver 中添加 8.8.8.8 并保存。

重置你的网络:/etc/init.d/networking restart

现在试试..

答案 14 :(得分:-5)

我遇到了同样的问题,找到了最简单的解决方案。 尝试替换它:

url="https://itunes.apple.com/in/genre/ios-business/id6000?mt=8"

与此:

url="http://itunes.apple.com/in/genre/ios-business/id6000?mt=8"

协议上的区别是“ s” 。这解决了我的麻烦。