python - Devuelve un objeto Request.Response from Flask
proxy python-requests (2)
Estoy intentando construir un proxy simple usando Flask y solicitudes. El código es el siguiente:
@app.route(''/es/<string:index>/<string:type>/<string:id>'',
methods=[''GET'', ''POST'', ''PUT'']):
def es(index, type, id):
elasticsearch = find_out_where_elasticsearch_lives()
# also handle some authentication
url = ''%s%s%s%s'' % (elasticsearch, index, type, id)
esreq = requests.Request(method=request.method, url=url,
headers=request.headers, data=request.data)
resp = requests.Session().send(esreq.prepare())
return resp.text
Esto funciona, excepto que pierde el código de estado de Elasticsearch. Intenté devolver resp
(a requests.models.Response
) directamente, pero esto falla con
TypeError: ''Response'' object is not callable
¿Hay otra forma sencilla de devolver un requests.models.Response
desde Flask?
Me encontré con el mismo escenario, excepto que en mi caso mis requests.models.Response contenían un archivo adjunto. Así es como lo hice funcionar:
return send_file (BytesIO (result.content), mimetype = result.headers [''Content-Type''], as_attachment = True)
Ok, lo encontré
Si se devuelve una tupla, los elementos de la tupla pueden proporcionar información adicional. Tales tuplas tienen que estar en la forma (respuesta, estado, encabezados) donde al menos un elemento debe estar en la tupla. El valor de estado anulará el código de estado y los encabezados pueden ser una lista o un diccionario de valores de encabezado adicionales.
( Flask docs )
Asi que
return (resp.text, resp.status_code, resp.headers.items())
Parece funcionar.