Заголовки обычно кодируются как Latin-1, поэтому requests
использует их для декодирования всех заголовков. Однако на практике заголовок Location обычно использует UTF-8. Затем вы видите Моджибаке , в данном случае данные UTF-8, декодированные как Latin-1.
По состоянию на запросы 2.14.0 (выпущено в мае 2017 г.) библиотека специально декодирует заголовок Location как UTF-8 именно для того, чтобы избежать возникшей проблемы. Обновите библиотеку ваших запросов.
Если вы не можете выполнить обновление, вы можете создать подкласс Session
класса, чтобы «исправить» проблему локально:
class UTF8RedirectingSession(requests.Session):
def get_redirect_target(self, resp):
if resp.is_redirect:
return resp.headers['location'].encode('latin1').decode('utf8')
return None
затем используйте
with UTF8RedirectingSession() as session:
response = session.get(...)