我在php和python中有两个网站。 当用户向服务器发送请求时,我需要php / python将HTTP POST请求发送到远程服务器。我想立即回复用户而不等待远程服务器的响应。
是否可以在向用户发送响应后继续运行php / python脚本。在这种情况下,我将首先回复用户,然后将HTTP POST请求发送到远程服务器。
是否可以在php / python中创建非阻塞HTTP客户端而无需处理响应?
在php和python中具有相同逻辑的解决方案对我来说是优选的。
谢谢
答案 0 :(得分:6)
在PHP中,您可以通过发送此请求来关闭连接(这与HTTP相关,也可以在python中使用,但我不知道要使用的正确语法):
// Send the response to the client
header('Connection: Close');
// Do the background job: just don't output anything!
附录:我忘了你可能要设置“Context-Length”。另外,请查看this comment以获取提示和真实测试用例。
<?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';
?>
答案 1 :(得分:2)
您可以生成另一个进程来处理对其他服务器的POST。在PHP中,您将生成进程并“断开连接”,这样您就不会等待响应。
exec("nohup /path/to/script/post_content.php > /dev/null 2>&1 &");
然后你可以卷曲来执行帖子。如果要将参数传递给PHP脚本,可以使用getopt()函数来读取它们。不确定你是否会在Python中做类似的事情。
答案 2 :(得分:1)
您需要做的是让PHP脚本执行另一个执行服务器调用的脚本,然后向用户发送请求。
答案 3 :(得分:0)
你必须使用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);
答案 4 :(得分:0)
你必须设定一个中间人。因此,在您自己的服务器中,您将拥有:
答案 5 :(得分:-3)
Hookah旨在解决您的问题。