python proxy flask python-requests

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.