Flask的test_client()未将自定义HTTP标头传递给Flask应用

时间:2018-09-17 12:59:29

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

我的测试脚本中包含以下内容:

def setUp(self):
    app = create_app()
    self.app = app.test_client()

def test_001(self):

    with self.app as app:
        headers = { 'API-KEY': 'myKey' }            
        app.get('/endpoint1', follow_redirects=True,headers=headers)

通读我的应用程序中的打印语句,我可以看到我的应用程序端点已被调用,除了请求中缺少标头之外,其他情况看起来都正常。

在我的API中,我有以下打印语句:

log("Headers: " + str(request.headers))

这将在控制台中输出以下消息:

Headers: User-Agent: werkzeug/0.14.1
Host: localhost
Content-Length: 0

因此,显然,客户端确实发送了一些标头,但没有发送我添加的自定义标头。

是否有人看到我在做错什么,导致标头要么不首先发送,要么服务器无法访问?

2 个答案:

答案 0 :(得分:0)

def setUp(self):
    self.app = create_app()
    self.app.config['TESTING'] = True
    self.app_context = self.app.app_context()
    self.app_context.push()
    self.client = self.app.test_client()

def test_001(self):
    headers = { 'API-KEY': 'myKey' }            
    response = self.client.get('/endpoint1', follow_redirects=True, headers=headers)

答案 1 :(得分:0)

对于仍在挣扎的人: 使用follow_redirects=True会在重定向时以某种方式释放标头。

简单的解决方法是自己进行重定向:

headers = { 'KEY': '123' }
code = 301
url = '/v1/endpoint'

while code == 301:
    response = client.get(url, headers=headers)
    code = response._status_code
    if code == 301: #'Location' is only in header if 301
        url = response.headers['Location']