Python中requests.post后如何获取跳转的地址?
小弟不才,这个小问题想了和搜索了,还是没有眉目,请你们指点一下。 正常使用浏览器步骤如下: A.html 页面,我填写好价格参数,python requests.post 后会跳转到 B.html 页面,需要在 B.html 里填写帐号密码再 post 上去。请问怎样从 post A.html 后知道将要跳转哪个页面?也就是说在 respond 返回 A 页面里能找到跳转的页面么?如果您没有看明白,那一定是我表达不清晰,非常抱歉,请指点一下。
Python中requests.post后如何获取跳转的地址?
如果是返回 302,response header 里面就有 location 这个 header
r = requests.post(‘http://xyz.com/302’,data = data)
r.headers[‘Location’]
还有一个简单做法就是:
r = requests.post(url, allow_redirects=True)
print(r.url)
用 requests.post 发请求后,如果服务端返回了重定向(比如 302 状态码),默认情况下 requests 会自动跟随重定向。这时候,最终响应的 response.url 就是跳转后的地址。
但如果你不想让它自动跳转,想拿到中间那个重定向的地址,可以设置 allow_redirects=False 来禁止自动重定向。然后从返回的响应头 Location 字段里就能拿到跳转地址。
看代码例子:
import requests
# 目标URL,这里用个能触发重定向的例子,实际替换成你的
url = 'http://httpbin.org/redirect-to'
params = {'url': 'https://www.example.com', 'status_code': 302}
# 发送POST请求,但不自动跟随重定向
response = requests.post(url, params=params, allow_redirects=False)
# 检查状态码是否为重定向(3xx)
if response.status_code in (301, 302, 303, 307, 308):
# 从响应头获取重定向地址
redirect_url = response.headers.get('Location')
print(f"重定向地址是: {redirect_url}")
print(f"当前响应URL(重定向前): {response.url}")
else:
print("没有发生重定向")
print(f"最终URL: {response.url}")
关键点就两个:
- 设
allow_redirects=False阻止自动跳转。 - 从
response.headers['Location']拿跳转地址。
如果允许自动重定向(默认就是允许的),那直接看 response.url 就是最终地址,但中间过程就看不到了。
总结:不想自动跳就关掉 allow_redirects,然后去头里找 Location。
感谢你的回复
请问你这个简单的做法,是在 post A 页面(比如说登录 A 页面成功)的情况下,用 r = requests.post(url, allow_redirects=True)
print(r.url)
就返回新的跳转地址对吗?
我马上测试,但还是想这样确定一下:)
是的

