Как обрабатывать перенаправления, которые не используют коды состояния 3XX? - PullRequest
1 голос
/ 29 мая 2019

По умолчанию 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
...