【问题标题】:Different HTTP status codes returned by requests and flask server [duplicate]请求和烧瓶服务器返回的不同HTTP状态代码[重复]
【发布时间】:2019-05-27 01:21:08
【问题描述】:

我编写了一个 python 脚本,它使用 requests 库来测试 Flask 应用程序。

在测试登录机制时,脚本无法区分成功的登录尝试和失败的登录尝试。 HTTP POST 请求总是返回 200 HTTP 状态码。

在安装的服务器端,成功的用户登录尝试使用状态码 302 记录,因为我在登录后将用户重定向到主页。

测试代码(使用正确的用户凭据):

>>> import requests
>>> from utils import retrieve_csrf_token
>>> url = 'http://localhost:5000/login'
>>> token = retrieve_csrf_token(url)
>>> session = requests.Session()
>>> r = session.post(url, data={'email':'admin@test.com','password':'123456','csrf_token':token})
>>> r.status_code
>>> 200

服务器日志:

Valid form submitted
127.0.0.1 - - [29/Dec/2018 17:33:32] "POST /login HTTP/1.1" 302 -
127.0.0.1 - - [29/Dec/2018 17:33:32] "GET /home HTTP/1.1" 200 -
127.0.0.1 - - [29/Dec/2018 17:33:32] "GET /favicon.ico HTTP/1.1" 404 -

编辑:

经过进一步检查发现,发送POST请求后,r.text中的响应是首页源代码。

使用代理执行相同的步骤或使用 Chrome 开发者工具检查请求,我看到了正确的代码。

【问题讨论】:

  • 302 是一个重定向状态码。您的客户将遵循重定向。
  • @nos 是的,我知道。 302是Flask的redirect()函数在服务端代码中返回的默认代码

标签: python-3.x flask python-requests


【解决方案1】:

我不确定您的测试代码中的“会话”对象是做什么的,但是如果您不想请求不遵循重定向(以便它为您提供实际的状态代码),您通常会这样做:

r = requests.get('http://github.com', allow_redirects=False)

文档:http://docs.python-requests.org/en/latest/user/quickstart/#redirection-and-history

【讨论】:

  • session 只是 requests.Session() 的一个实例。我忘记将其粘贴到我原始帖子(现已编辑)的代码中。我不知道需要将 allow_redirect 参数显式设置为 False 才能停止重定向,我认为这是默认行为。但这解决了我的问题。谢谢!
  • 很好,很高兴为您提供帮助
猜你喜欢
  • 2011-12-11
  • 2018-10-05
  • 1970-01-01
  • 2013-11-14
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多