【问题标题】:Python requests gives a 200 response while FireFox gets a redirectPython 请求给出 200 响应,而 FireFox 获得重定向
【发布时间】:2020-07-14 09:56:13
【问题描述】:

很简单的问题。当我在任何浏览器中访问我的网站时,它都会重定向。当我在完全相同的 URL 和协议上执行 requests.get(my_url) 时,我得到 200 响应。为什么?不管我将allow_redirects 设置为True 还是False,我仍然会得到相同的行为。我尝试设置一个标头,以便请求伪装成 Firefox,我仍然得到相同的行为。

我怎样才能让 requests.get 给我一个浏览器在完全相同的 URL 上获得的重定向?

#!/usr/bin/env/python

import requests

result = requests.get("https://bgjkfgbjfgghbjdfbhdgfjkh.fake")

print(result.status_code)

上面打印“200”。

【问题讨论】:

  • 没有真实网址很难说...
  • 该网站未公开,因此对您没有帮助。它与我提供的 URL 相同,只是使用了不同的(内部)域名。
  • 是的,但 URL(和用户代理)不是请求中发送的唯一内容。我建议使用 Fiddler(你必须让 Python 信任它的证书)作为中间人代理来比较浏览器和 Python 发送的确切请求,然后手动处理这些差异,直到你确定导致它的原因.我会为你做的,这就是我要求提供 URL 的原因,但如果它是内部的,那么你必须自己做。
  • 响应内容是和预期的一样还是完全不同?
  • @JeffWhite 然后给定您的 cmets(“result.is_redirect 为假,result.next 为空,result.history 为空”),它可能是 javascript 重定向或对某些 cookie 的测试。

标签: python python-requests


【解决方案1】:

从您所有的 cmets 中,听起来状态 200 并不表示已正确获取结束页面(您说 response.text 在两种情况下都完全不同 - 即它不是您期望的结束页面)。

在这种情况下,要么:

  • 您将获得一个简单的“单击此重定向”页面,并且您在 Firefox 中体验到的自动重定向是在 javascript 中实现的(requets.get 无法处理)。
  • 或者由于缺少其他内容(例如 cookie),网站正在提供另一个“错误”页面(没有 400 系列错误)。

即使allow_redirects 为 True,response.history 仍为空这一事实进一步证明,您永远无法获得在 Firefox 中看到的结束页面,并且您获得的 200 不是结束页面,而是“单击此处”或错误页面。

【讨论】:

  • 我认为这是某种 javascript 重定向。我不确定,我对 Web 应用程序的控制为零。 “响应属性”是什么意思? result.is_redirect 为假,result.next 为空,result.history 为空。重定向是立即的。
  • 这应该是评论,而不是答案。
  • @brunodesthuilliers 很可能......我担心所需的文字数量不适合评论 - 我的计划是在收到澄清后编辑答案。跨度>
  • @JeffWhite - requests.get 返回一个响应对象 - 响应对象上的所有属性是否与您对第一页或您被重定向到的页面的期望相匹配?
猜你喜欢
  • 2011-01-29
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 2016-07-12
  • 2011-09-24
相关资源
最近更新 更多