如何处理不使用3XX状态代码的重定向?

时间:2019-05-29 17:58:22

标签: python python-3.x python-requests http-status-codes

默认情况下,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

0 个答案:

没有答案