如何正确地重定向请求库响应到flask响应?



我想将请求库中的响应重定向为适当的flask响应。我想保存正文,状态码和标题,cookie。在错误响应的情况下,我也想将这个错误重定向为flask响应。

我试过了。但是遇到一个错误:

import requests
import flask
def f():
resp = requests.get(...)
return flask.Response(response=resp.json(), status=resp.status_code, headers=resp.headers)

错误:

ValueError: too many values to unpack (expected 2)

你可以使用Flask的make_response,从它的文档:

有时需要在视图中设置额外的头信息。因为视图不必返回响应对象,但可以返回由Flask本身转换为响应对象的值,所以在其中添加头信息会变得很棘手。这个函数可以被调用,而不是使用return,你会得到一个响应对象,你可以用它来附加报头。

您的代码必须更改为:

def f():
resp = requests.get(...)
flask_resp = Response(response=resp.text)
for key, value in resp.headers.items():
flask_resp.headers[key] = value
return flask_resp

关于cookies的更新

上面的代码没有设置cookie。从curl客户端我可以看到一个错误:

< Transfer-Encoding: chunked
< 
* Illegal or missing hexadecimal sequence in chunked-encoding
* Closing connection 0
curl: (56) Illegal or missing hexadecimal sequence in chunked-encoding

意味着其中一些头文件是"损坏的"。头瓶发回。我试图为set-cookie标头设置标头,即:

def f():
resp = requests.get(...)
flask_resp = Response(response=resp.text)
for key, value in resp.headers.items():
if key == 'Set-Cookie':
flask_resp.headers[key] = value
return flask_resp

,然后在浏览器中填充cookie。所以,一些其他的头从resp.headers.items()引起的问题。您可以使用它并找出导致问题的原因和原因。