我正在使用python并且只是在django上构建一个API服务器。 我用urllib2编写了一个脚本来访问这个服务器。
要访问此API,请求必须具有basic-auth信息。如果授权失败,API会给出代码为401的响应。
此授权检查几个参数。所以我添加内容作为回应。像这样:
API_ERROR_DEF = {
10001: 'Request without Basic Auth.',
30001: 'Timestamp outdated.',
...
...
'default': 'API Error: uncatched error.',
}
def _request_auth(error_code):
response = HttpResponse()
response['WWW-Authenticate'] = 'Basic realm=testMyAPI'
response.status_code = 401
response.content = API_ERROR_DEF.get(error_code, API_ERROR_DEF['default'])
return response
但是有一个问题。 当我直接在bash中运行此服务器时,我可以使用脚本获取包含内容的401响应。像这样:
-> print e.read()
(Pdb) l
92 res = urllib2.urlopen(req)
93 print res.read()
94 except urllib2.HTTPError as e:
95 traceback.print_exc()
96 __import__("pdb").set_trace()
97 -> print e.read()
98
99 if "__main__" == __name__:
100 test(sys.argv[1])
101 #ret = make_signature(sys.argv[1], sys.argv[2])
102 #print ret
(Pdb) c
Timestamp outdated.
但是当我在nginx + uwsgi上运行这个服务器时。我发现服务器在脚本发布时没有给我任何内容,并返回401响应。但是,只有我发送方法为获取的请求时,此内容才会再次显示。
我认为nginx或uwsgi上必须有一些影响它的选项。但是我在他们的文件中搜索了很长时间,只让我更加焦虑。
所以任何人都可以帮助我。