默认情况下,allow_redirects
通常为true,但这似乎无法处理给出非3XX状态代码的重定向。
更具体地说,我该如何处理
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
# example url
>>> r.status_code
200
>>> r.text
<p>Redirecting...</p>
手动访问该站点确实表明,尽管给出了200
,但页面确实已重定向。
编辑: 我目前的解决方案。以后可能要清理
def meta_redirect(html_text, uri):
start = html_text.find('<metahttp-equiv="refresh"content="0;url=') + 40
end = html_text.find('"', start)
redirect = html_text[start:end]
if "http" in redirect:
return redirect
return '/'.join([uri, redirect])
def main():
uri = 'https://api.github.com/user'
r = requests.get(uri, auth=('user', 'pass'))
html_text = r.text.lower().replace("'", '"').replace(" ", "")
while '<metahttp-equiv="refresh"content="0;url=' in html_text:
r = requests.get(meta_redirect(html_text, uri), auth=('user', 'pass'))
html_text = r.text.lower().replace("'", '"').replace(" ", "")
return r