【问题标题】:How do I test for 401 response to a post request in python?如何在 python 中测试对 post 请求的 401 响应?
【发布时间】:2016-03-16 23:08:29
【问题描述】:

我正在使用发布请求来访问需要身份验证的网站。如果该身份验证不正确,我会收到响应 [401]。我想测试身份验证是否不正确,如果是,则中止该过程并显示某种错误。我不知道测试响应是否为 401 的语法。

output = requests.post(cfg.get('HTTP', 'url'), data = query, verify=False, auth=HTTPBasicAuth(credentials['user'], credentials['pass']))

        if output == '<Response [401]>':
            sys.exit('Incorrect Authentication. Please try again.')
        else:
            sys.exit('manual stop1')

除了'&lt;Response [401]&gt;',我还尝试了'Response [401]''response [401]''&lt;Response[401]&gt;''Response[401]''response[401]''[401]''401',以及所有没有引号的。

我已经看到一些使用烧瓶和 json 的响应,但我希望不必更改我请求数据的方式。谢谢!

【问题讨论】:

  • 您考虑过阅读文档吗? docs.python-requests.org/en/master - 从字面上看,第一个示例显示了如何处理 HTTP 状态代码。
  • 看起来你假设 output 是一个字符串,而它实际上是一个 Response 类,这就是你所有比较失败的原因。
  • 我是 python 新手,我没有意识到状态码与响应是一回事。现在我知道了,谢谢。

标签: python authentication http-status-code-401


【解决方案1】:

你想要status_code 属性

if output.status_code == 401:
    ...

或者为了避免硬编码数字:

if output.status_code == requests.status_codes.codes.UNAUTHORIZED:
    ....

【讨论】:

  • 我认为应该是requests.status_codes.codes.UNAUTHORIZED,即401,而不是METHOD_NOT_ALLOWED,即405。
猜你喜欢
  • 2017-03-27
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 2016-08-25
相关资源
最近更新 更多