Python请求-ConnectionError-超过最大重试次数
我正在使用rauth和请求调用BeatPortAPI。调用正常,但我偶尔会遇到以下错误Python请求-ConnectionError-超过最大重试次数,python,post,https,Python,Post,Https,我正在使用rauth和请求调用BeatPortAPI。调用正常,但我偶尔会遇到以下错误ConnectionError:HTTPSConnectionPool(host='oauth-api.beatport.com',port=443):url超过了最大重试次数 这是回溯 Traceback (most recent call last): File "<console>", line 1, in <module> File "scraper/songlist_t
ConnectionError:HTTPSConnectionPool(host='oauth-api.beatport.com',port=443):url超过了最大重试次数
这是回溯
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "scraper/songlist_top100.py", line 88, in <module>
'sortBy': 'releaseDate ASC'})
File "C:\Python27\lib\site-packages\requests\sessions.py", line 347, in get
return self.request('GET', url, **kwargs)
File "C:\Python27\lib\site-packages\rauth\session.py", line 208, in request
return super(OAuth1Session, self).request(method, url, **req_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 335, in reques
t
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 438, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 327, in send
raise ConnectionError(e)
ConnectionError: HTTPSConnectionPool(host='oauth-api.beatport.com', port=443):
Max retries exceeded with url: /catalog/3/tracks?perPage=150&
oauth_nonce=xxxxx&oauth_timestamp=xxxxx&facets=artistName%3A
Avicii&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&
oauth_consumer_key=xxxxx&oauth_token=xxxxxx&sortBy=releaseDate+ASC
&oauth_signature=xxxxx%3D&page=3 (Caused by <class 'httplib.BadStatusLine'>: '')
为什么会出现上述错误?看起来Beatport API过载,有时会过早关闭连接。您的第一组请求很顺利地成功了,是第3页抛出了错误,因为响应是空的 您确实应该将此情况报告给Beatport,但您可以通过指示
请求
模块重试请求来解决此问题:
from requests.adapters import HTTPAdapter
# ....
session = beatport.get_session((access_token, access_token_secret))
session.mount('https://oauth-api.beatport.com', HTTPAdapter(max_retries=5))
如果发生错误,将重试您的请求几次。您的回溯与代码完全不匹配。服务器给你一个空响应(如中所示,根本没有响应)。@MartijnPieters我忽略了响应部分,认为它与错误无关。我也用响应部分更新了代码。不知道为什么会出现错误,但第3页似乎出现了错误,所以第1页和第2页可能成功了。听起来你需要和Beatport谈谈这个问题,我也是这么想的。它通常是有效的,但我有时会遇到这个错误。有帮助吗?您应该能够调用
session.mount('https://oauth-api.beatport.com,HTTPAdapter(max_retries=5))
就在会话=
行之后。但是是否可以在请求的每次重试中添加延迟?@avi:否,但是您可以使用类似于添加延迟的第三方包。
from requests.adapters import HTTPAdapter
# ....
session = beatport.get_session((access_token, access_token_secret))
session.mount('https://oauth-api.beatport.com', HTTPAdapter(max_retries=5))