请求和Flask服务器返回的不同HTTP状态代码

时间:2018-12-29 17:18:17

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

我编写了一个使用请求库来测试Flask应用程序的python脚本。

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

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

测试人员代码(具有正确的用户凭据):

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">


<div class="container text-center">
    <div class="custom-control d-inline-block custom-checkbox">
      <input type="checkbox" class="custom-control-input" id="customCheck1">
      <label class="custom-control-label" for="customCheck1">Check this custom checkbox</label>
    </div>
</div>

服务器日志:

>>> 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

编辑:

进一步检查后,我注意到在发送POST请求后,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 - 中的响应是主页源代码。

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

1 个答案:

答案 0 :(得分:2)

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

override func viewDidLoad() {
    super.viewDidLoad()

    self.tableView.allowsSelection = true
    self.tableView.delegate = self

}

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