неверный ответ от прокси с запросами python

Я использую API запросов с Python2.7.

Я пытаюсь загрузить определенные веб-страницы через прокси-серверы. У меня есть список доступных прокси-серверов. Но не все прокси-серверы работают должным образом. Некоторые прокси-серверы требуют аутентификации, другие перенаправляют на рекламные страницы и т. Д. Чтобы обнаружить / проверить неправильные ответы, я включил две проверки в свой код URL-запросов. Похоже на это

import requests

proxy = '37.228.111.137:80'
url = 'http://www.google.ca/'
response = requests.get(url, proxies = {'http' : 'http://%s' % proxy})
if response.url != url or response.status_code != 200:
    print 'incorrect response'
else:
    print 'response correct'
    print response.text

Есть некоторые прокси-серверы, на которых вызов request.get выполняется успешно, и они проходят эти два условия и по-прежнему содержат недопустимый источник html в атрибуте response.text. Однако, если я использую тот же прокси в своем браузере FireFox и пытаюсь открыть ту же веб-страницу, мне отображается недействительная веб-страница, но мой скрипт python говорит, что ответ должен быть действительным.

Может ли кто-нибудь указать мне, какие еще необходимые проверки мне не хватает, чтобы отсеять неправильные результаты html?

or

Как я могу успешно проверить правильность веб-страницы, которую я намеревался получить?

С Уважением.


person Ozair Shafiq    schedule 17.08.2015    source источник
comment
попробуйте использовать прокси с urllib, как это сделано здесь Прокси-сервер с Urllib2   -  person Vaulstein    schedule 17.08.2015
comment
Я использовал запросы, потому что думал, что их будет легче использовать и понять. Но я просто попытался использовать urllib2, как вы предложили, и результат такой же. Атрибуты response.url и response.code возвращают те же значения, что и для Requests API, и HTML-код по-прежнему недействителен.   -  person Ozair Shafiq    schedule 17.08.2015


Ответы (1)


Что такое "недействительная веб-страница" при отображении в вашем браузере? Сервер может вернуть код состояния HTTP 200, но содержимое является сообщением об ошибке. Вы понимаете это как сообщение об ошибке, потому что вы можете понять его, а браузер или код не могут.

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

person mhawke    schedule 17.08.2015
comment
Под недействительной веб-страницей я подразумеваю веб-страницу, которая на самом деле не такая, как я ожидал. Например, есть один прокси-сервер, который ведет себя так же, как и мой скрипт python, но если бы я использовал его в своем браузере FireFox, какой бы URL-адрес я ни пытался открыть, он перенаправил бы меня в 2D-игру в Интернете. Другие прокси-серверы перенаправляют на страницы аутентификации и т. Д. - person Ozair Shafiq; 17.08.2015
comment
Если у вас есть какие-либо сведения о содержимом целевой страницы, вы можете проверить, содержит ли возвращаемый HTML это содержимое, и принять его на этом основании. Это хороший момент, и я думаю, что я знаком с целевой веб-страницей, но все же должен ли я анализировать всю веб-страницу, чтобы проверить, действительно ли это то, что я намеревался получить? Если бы я попытался получить google.com, как бы вы посоветовали мне попытаться проверить, получаю ли я правильный источник html для этого URL? - person Ozair Shafiq; 17.08.2015
comment
Если вы посмотрите на HTML, возвращаемый при использовании 37.228.111.137:80 в качестве прокси, вы увидите, что он использует метатег обновления для перенаправления браузера. requests этого не сделает, но Firefox сделает. - person mhawke; 17.08.2015
comment
Спасибо, что указали на это. Я не знал об этом. По-видимому, двух проверок в моем скрипте Python недостаточно для проверки правильности веб-страницы. Что еще я могу включить, чтобы гарантировать правильность веб-страницы? - person Ozair Shafiq; 17.08.2015