gpt4 book ai didi

python - 请求 - 在发出请求之前确定参数化 url,以包含在 Referer header 中

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:49 25 4
gpt4 key购买 nike

我正在使用 Requests 编写一个 Python 2.7 脚本来自动访问特定网站。出于“安全原因”,该网站要求提供 与请求 URL 匹配的 Referer header 。该 URL 由 params 字典中的许多项目构建而成,传递给 requests.post()。

有没有办法在发出请求之前确定 Requests 将使用的 URL,以便 Referer header 可以设置为这个正确的值?假设我有很多参数:

params = { 'param1' : value1, 'param2' : value2, # ... etc
}

base_url = "http://example.com"
headers = { 'Referer' : url } # but what is 'url' to be?
requests.post(base_url, params=params, headers=headers) # fails as Referer does not match final url

我想一种解决方法是发出请求并在事后查看 URL 是什么。然而,这有两个问题 - 1. 它会显着增加脚本的执行时间开销,因为会有很多这样的请求,以及 2. 它实际上不是一个有用的解决方法,因为服务器实际上将请求重定向到另一个URL,所以之后读取它不会给出正确的 Referer 值。

我想指出,我有这个脚本与 urllib/urllib2 一起工作,我正在尝试用 Requests 编写它,看看它是否可行,也许更简单。这不是脚本必须遵循的复杂过程,但它可能稍微超出了 Requests 的范围。没关系,我只想确认是这样的。

最佳答案

我想我找到了一个解决方案,基于 Prepared Requests .这个概念是 Session.prepare_request() 将做所有准备请求的事情,除了发送它,这允许我的脚本然后读取准备好的请求的 url,现在包括参数,其顺序由听写命令。然后它可以适本地设置 Referer header ,然后发出原始请求。

params = {'param1' : value1, 'param2' : value2, # ... etc
}
url = "http://example.com"

# Referer must be correct
# To determine correct Referer url, prepare a request without actually sending it
req = requests.Request('POST', url, params=params)
prepped = session.prepare_request(req)
#r = session.send(prepped) # don't actually send it

# add the Referer header by examining the prepared url
headers = { 'Referer': prepped.url }

# now send normally
r = session.post(url, params=params, data=data, headers=headers)

关于python - 请求 - 在发出请求之前确定参数化 url,以包含在 Referer header 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com