【问题标题】:How does python "requests" provides the history urls data?python“请求”如何提供历史url数据?
【发布时间】:2019-04-03 18:47:34
【问题描述】:

在python的requests中,如果我关注响应的historyurl,它会为我提供重定向的URL,如下所示:

import requests
response = requests.get('https://yahoo.com')
for resp in response.history:
    print(resp.url, resp.text)

问:有人知道重定向urls 的来源吗?标题?如果header中不包含location项,但是做了重定向,如何识别重定向URL?请问可以提供参考吗?

编辑:

我查看了文档。它没有说“如何”。一些答案表明它是headers['Location']。我不知道。我从历史响应(逐项)中提取的重定向 URL 是否只是每个响应中的“位置”标头?还是图书馆使用其他任何东西来识别重定向 URL?可能有一些 python 专家可以提供帮助吗?

【问题讨论】:

    标签: python-3.x python-requests url-redirection http-redirect


    【解决方案1】:

    HTTP 重定向通常采用 3xx 响应代码加上“Location:”标头的形式,该标头指示重定向到的位置。这在 HTTP 协议中进行了编码,因此任何符合规范的客户端实现都将简单地执行规范中所说的任何操作。

    RFC 7231 Section 6.4.

    总而言之,如果您调用 requests 访问一个 URL(允许重定向 - 可以使用 requests 中的选项将其关闭)并且服务器说“改为转到此处”,requests 将在新 URL 上内部调用自身,并将前一个 URL 添加到历史记录中,尽可能多地到达未重定向的页面,或者您达到限制(通常设置为 30 之类的值以防止恶作剧,例如页面在无限循环中重定向到自身)。

    许多 Web 服务器(例如 CMS)依赖于服务器端 URL 重写配置,这允许程序员生成(结构上)简单的 URL,然后服务器解析并重定向到可能对人眼更友好的不同位置或符合该服务器管理员定义的统一约定,并且某些内容交付网络使用重定向将每个访问者发送到地理上或网络拓扑方面靠近他们的服务器。点击跟踪还经常导致您的浏览器在发送它以实际获取它试图显示的内容之前通过一个唯一的 URL 跳转。由于这些技术,当您尝试获取某些内容时,经常会看到多个重定向。

    此外,除了requests 或类似库支持之外,交互式浏览器通常还支持 JavaScript,它允许网页在浏览器中运行代码,这可能导致它访问受编程控制的新页面(即可能在甚至可能不是完全确定性的复杂条件下)。如果您需要支持这一点,目前流行的解决方案是运行一个真正的交互式浏览器(可能是“无头”,即没有可观察的用户界面)并让它以某种方式将其状态传达给 Python。

    【讨论】:

    • 谢谢。您的回答提供了重定向如何发生的多种方式。我的问题是,请求会考虑哪些方法来执行重定向?它只考虑位置标头+响应代码吗?或其他服务器端方法等?
    • 对不起,我真的不知道如何才能更清楚地说明这一点。只有一种服务器端重定向技术,即您描述的 3xx HTTP 重定向。第四段探讨了服务器可能执行此操作的一些常见场景。
    【解决方案2】:
    【解决方案3】:

    我猜你误解了重定向的工作原理。

    重定向是一种客户端操作,这意味着如果您不进行重定向,您将不会被重定向。所以实际上requests 会为您进行重定向。能追溯历史也就不足为奇了。

    假设您向a.com 发送请求并且响应重定向到b.com,那么requests 将向b.com 发出另一个请求并将a.com 添加到历史记录中。

    如果b.com 的响应也重定向到,比如说c.com,那么requests 会做同样的事情:向c.com 发出另一个请求并将b.com 添加到历史记录中。

    Here是相关方法resolve_redirects,它是一个生成器,相信不难理解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 2021-10-06
      • 1970-01-01
      • 2017-08-11
      • 2019-09-11
      • 2018-05-02
      • 2015-11-21
      相关资源
      最近更新 更多