отправка неблокирующего запроса HTTP POST

У меня есть два веб-сайта в php и python. Когда пользователь отправляет запрос на сервер, мне нужен php / python для отправки запроса HTTP POST на удаленный сервер. Я хочу немедленно ответить пользователю, не дожидаясь ответа с удаленного сервера.

Возможно ли продолжить запуск сценария php / python после отправки ответа пользователю. В этом случае я сначала отвечу пользователю и только затем отправлю запрос HTTP POST на удаленный сервер.

Возможно ли создать неблокирующий HTTP-клиент в php / python без обработки ответа вообще?

Решение, которое будет иметь одну и ту же логику в php и python, предпочтительнее для меня.

благодаря

В PHP вы можете закрыть соединение, отправив этот запрос (это связано с HTTP и работает также в python, хотя я не знаю, какой синтаксис использовать):

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

Добавление: Я забыл упомянуть, что вам, вероятно, нужно установить «Контекст-Длина». Кроме того, ознакомьтесь с этим комментарием для советов и реального теста.

Пример:

 <?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'; ?> 

Вы можете создать другой процесс для обработки POST на другом сервере. В PHP вы создадите процесс и «отключите», чтобы не дожидаться ответа.

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

Затем вы можете завивать, чтобы выполнить пост. Если вы хотите передать параметры скрипту PHP, вы можете использовать функцию getopt () для их чтения. Не уверен, сделаете ли вы что-нибудь подобное в Python.

Вам нужно сделать, чтобы скрипт PHP выполнял другой скрипт, который вызывает сервер, а затем отправляет пользователю запрос.

в python вы можете просто закрыть выходной поток, а затем продолжить свой почтовый запрос

 sys.stdout.close() 

Вы должны использовать 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); 

Кальян предназначен для решения вашей проблемы.