복붙노트

[PYTHON] 비 블로킹 HTTP POST 요청 보내기

PYTHON

비 블로킹 HTTP POST 요청 보내기

나는 php와 python으로 두 개의 웹 사이트를 가지고있다. 사용자가 서버에 요청을 보내면 원격 서버에 HTTP POST 요청을 보내려면 php / python이 필요합니다. 원격 서버의 응답을 기다리지 않고 즉시 응답하고 싶습니다.

사용자에게 응답을 보낸 후 PHP / Python 스크립트를 계속 실행할 수 있습니까? 이 경우 먼저 사용자에게 회신하고 HTTP POST 요청을 원격 서버로 보냅니다.

그것은 응답을 전혀 처리하지 않고 PHP / 파이썬에서 비 차단 HTTP 클라이언트를 만들 수 있습니까?

php와 python에서 동일한 논리를 갖는 솔루션이 나에게 더 좋습니다.

감사

해결법

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

    1.PHP에서는이 요청을 전송하여 연결을 닫을 수 있습니다 (HTTP와 관련되어 있으며 사용하기에 적합한 구문을 모르지만 python에서도 작동 함).

    PHP에서는이 요청을 전송하여 연결을 닫을 수 있습니다 (HTTP와 관련되어 있으며 사용하기에 적합한 구문을 모르지만 python에서도 작동 함).

    // Send the response to the client
    header('Connection: Close');
    // Do the background job: just don't output anything!
    

    부록 : "Context-Length"를 설정해야한다는 것을 잊어 버렸습니다. 또한 팁과 실제 테스트 사례에 대해이 설명을 확인하십시오.

    <?php    
    ob_end_clean();
    header('Connection: close');
    
    ob_start();
    
    echo 'Your stuff goes here...';
    
    header('Content-Length: ' . ob_get_length());
    
    ob_end_flush();
    flush();
    
    // Now we are in background mode
    sleep(10);
    echo 'This text should not be visible';    
    ?>
    
  2. ==============================

    2.다른 서버에 POST를 처리하는 다른 프로세스를 생성 할 수 있습니다. PHP에서는 프로세스를 생성하고 "연결 해제"하므로 응답을 기다리지 않습니다.

    다른 서버에 POST를 처리하는 다른 프로세스를 생성 할 수 있습니다. PHP에서는 프로세스를 생성하고 "연결 해제"하므로 응답을 기다리지 않습니다.

    exec("nohup /path/to/script/post_content.php > /dev/null 2>&1 &");
    

    그러면 게시물을 컬링 할 수 있습니다. 매개 변수를 PHP 스크립트에 전달하려면 getopt () 함수를 사용하여 매개 변수를 읽을 수 있습니다. 파이썬에서 비슷한 것을 할 것인지 확신 할 수 없습니다.

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

    3.당신이해야 할 일은 PHP 스크립트가 서버 호출을하는 다른 스크립트를 실행 한 다음 사용자에게 요청을 보내는 것입니다.

    당신이해야 할 일은 PHP 스크립트가 서버 호출을하는 다른 스크립트를 실행 한 다음 사용자에게 요청을 보내는 것입니다.

  4. ==============================

    4.fsockopen을 사용해야합니다. 그리고 결과를 듣지 마라.

    fsockopen을 사용해야합니다. 그리고 결과를 듣지 마라.

    <?php
    
    $fp = fsockopen('example.com', 80);
    
    $vars = array(
        'hello' => 'world'
    );
    $content = http_build_query($vars);
    
    fwrite($fp, "POST /reposter.php HTTP/1.1\r\n");
    fwrite($fp, "Host: example.com\r\n");
    fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
    fwrite($fp, "Content-Length: ".strlen($content)."\r\n");
    fwrite($fp, "Connection: close\r\n");
    fwrite($fp, "\r\n");
    
    fwrite($fp, $content);
    
  5. ==============================

    5.중간 남자를 배치해야합니다. 따라서 자신의 서버에서 다음과 같은 이점을 얻을 수 있습니다.

    중간 남자를 배치해야합니다. 따라서 자신의 서버에서 다음과 같은 이점을 얻을 수 있습니다.

  6. ==============================

    6.물 담뱃 대는 당신의 문제를 해결하도록 설계되었습니다.

    물 담뱃 대는 당신의 문제를 해결하도록 설계되었습니다.

  7. from https://stackoverflow.com/questions/1555517/sending-a-non-blocking-http-post-request by cc-by-sa and MIT license