【问题标题】:python requests handle error 302?python请求处理错误302?
【发布时间】:2015-05-15 17:42:26
【问题描述】:

我正在尝试使用 requests 库向重定向 url 发出 http 请求(在响应 headers-Location 中)。使用 Chrome 检查时,我可以看到响应状态为 302。

但是,在 python 中,requests 总是返回 200 状态。我添加了allow_redirects=False,但状态仍然是200。

  • 网址是https://api.weibo.com/oauth2/authorize?redirect_uri=http%3A//oauth.weico.cc&response_type=code&client_id=211160679
  • 第一行进入测试账号:moyan429@hotmail.com
  • 第二行输入密码:112358

然后点击第一个按钮登录。

我的 Python 代码:

import requests

user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36'
session = requests.session()
session.headers['User-Agent'] = user_agent
session.headers['Host'] = 'api.weibo.com'
session.headers['Origin']='https://api.weibo.com'
session.headers['Referer'] ='https://api.weibo.com/oauth2/authorize?redirect_uri=http%3A//oauth.weico.cc&response_type=code&client_id=211160679'
session.headers['Connection']='keep-alive'

data = {
    'client_id': api_key,
    'redirect_uri': callback_url,
    'userId':'moyan429@hotmail.com',
    'passwd': '112358',
    'switchLogin': '0',
    'action': 'login',
    'response_type': 'code',
    'quick_auth': 'null'
}

resp = session.post(
    url='https://api.weibo.com/oauth2/authorize',
    data=data,
    allow_redirects=False
)
code = resp.url[-32:]
print code

【问题讨论】:

  • 那是因为你得到一个错误;您的请求仍有问题。
  • 致所有指出用户名和密码的人:API 密钥 丢失,OP 声明这是一个测试帐户
  • 我还注意到页面上有一个验证码,以及您未指定的其他参数。您是否尝试过查找有关其 oauth2 API 要求的文档?
  • 这个帖子帮了我stackoverflow.com/questions/22150023/… italic

标签: python redirect python-requests


【解决方案1】:

您可能会收到一条 API 错误消息。使用print resp.text 来查看服务器告诉你的错误。

请注意,您始终可以检查 resp.history 以查看是否有任何重定向;如果有的话,你会发现一个响应对象列表。

不要设置HostConnection 标头;将这些留给requests 处理。我怀疑这里是否需要 OriginReferer 标头。由于这是一个APIUser-Agent 标头也可能是矫枉过正。

【讨论】:

  • 感谢您的回复。我检查了resp.history,它是空的。并且 resp.text 的内容显示它仍然停留在同一页面中。但是当我使用浏览器登录这个 url 时,会发生重定向。
  • @GuixingWei:所以你还缺少其他东西。也许该页面使用 CSRF 令牌?也许您需要先GET 登录页面才能获取会话cookie?
  • 非常感谢您的建议。我解决了这个问题。是的,你的想法是对的。我需要从登录页面获取cookie,然后使用cookie获取授权页面。非常感谢这个想法!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
相关资源
最近更新 更多