2014-01-07 2 views
0

게시 된 데이터를 수신하고 바로 200 OK 응답을 반환합니다. 그런 다음 수신 된 데이터를 처리합니다. 나는 teardown 기능을 수행하는 방법을 고려 중이 야하지만 난 그것을 수신 된 데이터를 전달하는 방법을 찾을 수 없습니다 :게시 된 데이터를 티어 다운 기능에 전달

@app.route('/f', methods = ['POST']) 
def f(): 

    data = request.stream.read() 
    return '' 

@app.teardown_request 
def teardwon_request(exception=None): 

    # How to use posted data here? 

플라스크 버전은 난을 구현하기 위해 노력하고있어 0.10.1

입니다 페이팔 IPN 청취자 청취자의 HTTP 200 응답이 청취자의 IPN 메시지 전에 발생하는 것을

https://developer.paypal.com/webapps/developer/docs/classic/ipn/gs_IPN/#overview

알 수 있습니다.

+0

왜 그렇게 할 수 있습니까? 분해에서 요청을 처리함으로써 얻을 수있는 이점은 무엇입니까? –

+0

발신자에게 처리 결과를 게시해야합니다. 그러나 발신자는 먼저 '200 OK'응답을 보내야하며, 그 다음에야 내 게시물을 다른 요청으로 보냅니다. –

+0

미안, 뭐라구? 그것은 스캔하지 않습니다. 이 문맥에서 '내 게시물'은 무엇을 의미합니까? '200 OK'는'teardown_request' 핸들러가 완료 될 때까지 호출자에게 도달하지 않습니다, btw. –

답변

2

당신은 일을 지나치게 복잡하게 만들고 있습니다. 요청 처리기에서 Flask 서버의 요청을 보냅니다. 페이팔 IPN 알림은 단지 빈 200 응답이 필요합니다. 페이팔은 이 아니며 을 보내기 전에을 보내야합니다. 전에 HTTP 요청을 서버에 보낼 수 있습니다.

개요 페이지는 실제로 혼란 스럽지만 게시 된 PHP 코드는 해당 서버로 페이팔 IPN 포스트가 완료 될 때까지 요청을 닫지 않습니다.

이 (어려운 디자인으로 만들기가) 일 경우, 요청을 Paypal에 비동기 적으로 다시 처리해야합니다. 별도의 스레드 (예 : 대기열 사용, IPN에서받은 데이터 밀어 넣기)를 수행하고 별도의 스레드에서 대기열을 폴링하여 해당 스레드에서 Paypal과 통신하도록 할 수 있습니다. 또는 Celery을 사용하여 작업을 단순화 할 수 있습니다 (작업을 비동기 적으로 처리하도록 푸시). 어느 쪽이든, 이렇게하면 들어오는 요청을 일찍 닫을 수 있습니다.

+0

시도해 보겠습니다. 해당 개요 페이지에서 이해할 수 없습니다. –

+0

실제로 요청을 닫기 전에 IPN 메시지를 게시하는 것입니다. 필자가 사용했던 3 ~ 4 개의 페이팔 API는 매우 혼란스럽고 구현하기위한 투쟁이었습니다. 나는 반복적으로 테스트 한 후에 만 ​​그들을 이해했다. –