Команда POST запросов POST не следует за редиректом 302 - PullRequest
1 голос
/ 11 мая 2019

При передаче запроса POST на веб-сайт с помощью запросов, он не может быть выполнен и будет ждать бесконечно долго.

Я рассмотрел поведение в Fiddler и вижу, что запрос POST успешно возвращается с перенаправлением 302. Тем не менее, запросы продолжают ждать и никогда не будут продолжаться, хотя пакеты вернулись.

Я застрял на том, как диагностировать это, поскольку я не получаю твердой ошибки, и пакеты, кажется, возвращаются, любая помощь будет высоко ценится.

Почтовый запрос строится следующим образом:

loginData = 'data=45B892A0F9C127FB0A052CB&cid=1000'
s.post(url, verify=rVerify, headers=headers, data=loginData)

Я пробовал allow_redirects как True, так и False, но безуспешно.

Вот запрос и ответ в Fiddler:

fiddler result

Обновить данные заголовка:

'User-Agent': 'Mozilla/5.0'
'Content-Type': 'application/x-www-form-urlencoded'
'Connection': 'Keep-Alive'
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
'Accept-Language': 'en-US,en;q=0.5'
'Accept-Encoding': 'gzip, deflate, br'

Обновление:

  • Я протестировал только с помощью URL, и команда все еще зависает.
  • Я также попытался получить запрос GET, и это также зависает.

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Таким образом, проблема заключается в том, что Python3 и библиотека liblib не могут проанализировать заголовок, возвращенный с сервера.

Вот проблема: https://github.com/kennethreitz/requests/issues/3098

Чтобы получитьвокруг этого я только что перешел на Python 2, который не должен анализировать заголовок таким же образом.

0 голосов
/ 11 мая 2019

Вы можете попробовать использовать объект POST, чтобы вручную перенаправить следующий URL, который возвращается с 302.

loginData = 'data=45B892A0F9C127FB0A052CB&cid=1000'
response = s.post(url, verify=rVerify, headers=headers, data=loginData)

next_url = response['location']

# do your next step here using the returned URL

302 должен возвращать URL-адрес для перенаправления в заголовке в качестве значения «Местоположение». Как показано выше, вы найдете это в словаре объектов Response.

Источник: https://en.wikipedia.org/wiki/HTTP_302, https://2.python -requests.org / ru / master / api / # запросы. Ответ

...