【问题标题】:invalid response from proxy with python requests来自代理的无效响应与 python 请求
【发布时间】:2015-11-09 23:21:59
【问题描述】:

我在 Python2.7 中使用 Requests API。

我正在尝试通过代理服务器下载某些网页。我有一个可用代理服务器的列表。但并非所有代理服务器都能按预期工作。一些代理需要身份验证,其他代理需要重定向到广告页面等。为了检测/验证不正确的响应,我在我的 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

有一些代理服务器的 requests.get 调用成功并且它们通过了这两个条件并且在 response.text 属性中仍然包含无效的 html 源。但是,如果我在我的 FireFox 浏览器中使用相同的代理并尝试打开相同的网页,我会显示一个无效的网页,但我的 python 脚本说响应应该是有效的。

有人可以指出我还缺少哪些其他必要的检查来清除不正确的 html 结果?

如何成功验证我打算接收的网页是否正确?

问候。

【问题讨论】:

  • 尝试使用urllib 的代理,如此处Proxy with Urllib2 所做的那样
  • 我使用 Requests 是因为我认为它更易于使用和理解。但是,我只是按照您的建议尝试使用 urllib2,结果是一样的。属性 response.url 和 response.code 返回与 Requests API 相同的值,并且 html 仍然无效。

标签: python html proxy response python-requests


【解决方案1】:

什么是浏览器显示的“无效网页”?服务器可以返回 200 的 HTTP 状态码,但内容是错误消息。您将其理解为错误消息,因为您可以理解它,而浏览器或代码则不能。

如果您对目标页面的内容有任何了解,您可以检查返回的 HTML 是否包含该内容并在此基础上接受它。

【讨论】:

  • “无效网页”是指实际上不是我预期的网页。例如,有一个代理服务器的行为与我的 python 脚本相同,但如果我在我的 FireFox 浏览器中使用它,无论我尝试打开什么 URL,它都会将我重定向到基于 Web 的 2D 游戏。其他代理服务器重定向到认证页面等。
  • "如果您对目标页面的内容有任何了解,您可以检查返回的 HTML 是否包含该内容,并在此基础上接受它。"这是一个很好的观点,我想我对目标网页很熟悉,但我仍然应该解析整个网页以验证它是否真的是我想要接收的?如果我尝试获取 google.com,您会建议我如何尝试验证我是否收到了此 url 的正确 html 源?
  • 如果您查看使用 37.228.111.137:80 作为代理时返回的 HTML,您会发现它使用“元刷新”标签来重定向浏览器。 requests 不会这样做,但 Firefox 会。
  • 感谢您指出这一点。我不知道那件事。显然,我的 python 脚本中的两个检查不足以验证网页的正确性。我还可以包括什么来保证网页是否正确?
猜你喜欢
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多