복붙노트

[PYTHON] 플라스크에서 요청을 반환합니다. 응답 객체

PYTHON

플라스크에서 요청을 반환합니다. 응답 객체

플라스크 및 요청을 사용하여 간단한 프록시를 작성하려고합니다. 코드는 다음과 같습니다.

@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

이것은 Elasticsearch에서 상태 코드를 잃어 버리는 것을 제외하고는 작동합니다. 내가 resp (requests.models.Response)를 직접 돌려 보았는데, 이것은 실패한다.

TypeError: 'Response' object is not callable

Flask에서 requests.models.Response를 반환하는 또 다른 간단한 방법이 있습니까?

해결법

  1. ==============================

    1.좋아, 찾았 어.

    좋아, 찾았 어.

    (Flask 문서.)

    그래서

    return (resp.text, resp.status_code, resp.headers.items())
    

    트릭을하는 것 같다.

  2. ==============================

    2.나는 나의 경우에있어서 나의 요청을 제외하고 같은 시나리오를 만났다 ..models.Response는 첨부 파일을 포함했다. 이것이 내가 일하는 방법입니다.

    나는 나의 경우에있어서 나의 요청을 제외하고 같은 시나리오를 만났다 ..models.Response는 첨부 파일을 포함했다. 이것이 내가 일하는 방법입니다.

  3. ==============================

    3.서버가 인코딩 된 데이터 (예 : content-encoding : gzip)를 반환하고 변경되지 않은 헤더를 반환하는 경우 Response 객체의 text 또는 content 속성을 사용하면 작동하지 않습니다. 텍스트 및 내용이 디코딩되어 헤더보고 된 인코딩과 실제 인코딩이 일치하지 않기 때문에 발생합니다.

    서버가 인코딩 된 데이터 (예 : content-encoding : gzip)를 반환하고 변경되지 않은 헤더를 반환하는 경우 Response 객체의 text 또는 content 속성을 사용하면 작동하지 않습니다. 텍스트 및 내용이 디코딩되어 헤더보고 된 인코딩과 실제 인코딩이 일치하지 않기 때문에 발생합니다.

    문서에 따르면 :

    그래서 gzipped 데이터에 대해서도 다음과 같이 작동합니다 :

    esreq = requests.Request(method=request.method, url=url,
                             headers=request.headers, data=request.data)
    resp = requests.Session().send(esreq.prepare(), stream=True)
    return resp.raw.read(), resp.status_code, resp.headers.items()
    

    get과 같은 바로 가기 메서드를 사용하는 경우 다음과 같습니다.

    resp = requests.get(url, stream=True)
    return resp.raw.read(), resp.status_code, resp.headers.items()
    
  4. from https://stackoverflow.com/questions/19568950/return-a-requests-response-object-from-flask by cc-by-sa and MIT license