Python запросов зависает, тогда как CURL нет (тот же запрос) - PullRequest
0 голосов
/ 18 февраля 2020

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

Примечание: ожидается, что команда curl выдаст ошибку как я не отправляю необходимую информацию, например, cookie curl:

curl 'https://www.yellowpages.com.au/search/listings?clue=Programmer&locationClue=All+States&pageNumber=3&referredBy=UNKNOWN&&eventType=pagination' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0'

успешно получает ответ

Python:

import requests
r = requests.get('https://www.yellowpages.com.au/search/listings?clue=Programmer&locationClue=All+States&pageNumber=3&referredBy=UNKNOWN&&eventType=pagination', headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0'})

зависает при чтении навсегда

Ответы [ 2 ]

0 голосов
/ 19 февраля 2020

Работает с python 3.

import requests
r = requests.get('https://www.yellowpages.com.au/search/listings?clue=Programmer&locationClue=All+States&pageNumber=3&referredBy=UNKNOWN&&eventType=pagination', headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0'})
print(r.headers)

Ответ:

{'Cache-Control': 'max-age=86400, public', 'Content-Encoding': 'gzip', 'Content-Language': 'en-US', 'Content-Type': 'text/html;charset=utf-8', 'Server': 'Apache-Coyote/1.1', 'Vary': 'Accept-Encoding', 'X-Frame-Options': 'SAMEORIGIN', 'Content-Length': '8009', 'Date': 'Wed, 19 Feb 2020 06:04:55 GMT', 'Connection': 'keep-alive'}
0 голосов
/ 18 февраля 2020

Возможно, есть небольшие различия в способах подачи запросов. Например, Python запросы автоматически добавят несколько заголовков:

'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'

(Вы можете увидеть их, выполнив: r.request.headers)

В то время как Curl добавит : Accept: */* но не gzip, если вы не попросите об этом. Но рассматриваемый сайт, похоже, поддерживает gzip, поэтому проблема должна быть в другом месте.

Предложение: добавьте тайм-аут в свой запрос и перехватите возможные исключения ie:

try:
    r = requests...

except requests.exceptions.RequestException as e:
    print (e)
...