POST-запрос работает в Postman, но не в Python-запросах (200 ответов с обнаружением робота) - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть POST-запрос, который отлично работает как с Postman, так и cURL (он возвращает JSON-объект данных).Однако, когда я выполняю точно такой же запрос с библиотекой запросов Python, я получаю 200 успешных ответов, но вместо своего большого двоичного объекта JSON я получаю следующее:

<html>
<head>
<META NAME="robots" CONTENT="noindex,nofollow">
<script src="/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3">
</script>
<body>
</body></html>

Я использовал бины HTTP-запроса для проверкичто запрос от Postman / cURL точно такой же , что и запрос от Python Requests.

Вот мой запрос Postman в cURL:

curl -X POST \
  https:/someurl/bla/bla \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: 2488e914-531e-4ac7-ae8d-8490b2242396' \
  -H 'Referer: https://www.host.com/bla/bla/' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:65.0) Gecko/20100101 Firefox/65.0' \
  -H 'cache-control: no-cache' \
  -d '{"json1":"blabla","etc":"etc"}'

...и вот мой код Python:

payload = {
      "json1": "blabla",
      "etc": "etc",
    }

    headers = {
        'Host': 'www.host.com',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Accept-Language': 'en-US,en;q=0.5',
        'Accept-Encoding': 'gzip, deflate, br',
        'Referer': 'https://www.host.com/bla/bla/', 
        'Content-Type':'application/json',
        'X-Requested-With': 'XMLHttpRequest',
        'Connection': 'keep-alive',
        'Origin': 'https://www.host.com',
    }

    s = requests.Session()
    response_raw = s.post(url, json=payload, headers=headers)
    print(response_raw)
    print(response_raw.text)

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

1 Ответ

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

У меня была похожая проблема, которую я смог решить, отправив файл cookie в запросе.Попробуйте это:

...
my_cookie = {"Cookie": "cookie text..."}

s = requests.Session()
response_raw = s.post(url, json=payload, headers=headers, cookies=my_cookie)
print(response_raw)
print(response_raw.text)
print(response_raw.content)

Вы можете получить cookie на вкладке Network в консоли Dev Tools браузера в разделе Request Headers.Похоже, вы также можете получить cookie, используя библиотеку CookieJar Python.

...