Python中requests.post后如何获取跳转的地址?

小弟不才,这个小问题想了和搜索了,还是没有眉目,请你们指点一下。 正常使用浏览器步骤如下: A.html 页面,我填写好价格参数,python requests.post 后会跳转到 B.html 页面,需要在 B.html 里填写帐号密码再 post 上去。请问怎样从 post A.html 后知道将要跳转哪个页面?也就是说在 respond 返回 A 页面里能找到跳转的页面么?如果您没有看明白,那一定是我表达不清晰,非常抱歉,请指点一下。


Python中requests.post后如何获取跳转的地址?

4 回复

如果是返回 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}")

关键点就两个:

  1. allow_redirects=False 阻止自动跳转。
  2. response.headers['Location'] 拿跳转地址。

如果允许自动重定向(默认就是允许的),那直接看 response.url 就是最终地址,但中间过程就看不到了。

总结:不想自动跳就关掉 allow_redirects,然后去头里找 Location

感谢你的回复
请问你这个简单的做法,是在 post A 页面(比如说登录 A 页面成功)的情况下,用 r = requests.post(url, allow_redirects=True)
print(r.url)
就返回新的跳转地址对吗?
我马上测试,但还是想这样确定一下:)

回到顶部