发送非阻塞HTTP POST请求(sending a non-blocking HTTP POST

2019-07-22 10:23发布

我在PHP和Python中的两个网站。 当用户发送到我需要的PHP /蟒发送HTTP POST请求到远程服务器的服务器的请求。 我要回复用户不等待来自远程服务器的响应。

是否有可能继续向用户发送一个响应后运行一个PHP / Python脚本。 在这种情况下,我会先回复用户,然后才发送HTTP POST请求到远程服务器。

是否有可能创建PHP / Python的非阻塞HTTP客户端不处理的响应呢?

这将具有在PHP和python相同的逻辑的溶液优选为我。

谢谢

Answer 1:

在PHP中,你可以关闭发送该请求的连接(这是HTTP和相关工作也在蟒蛇,虽然我不知道正确的语法使用):

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


Answer 2:

您可以产生另一个进程来处理POST到其他服务器。 在PHP中,你会催生过程,“断开”,这样你就不会等待响应。

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

然后,您可以为您卷曲执行职务。 如果你想传递参数给PHP脚本,你可以使用getopt()函数读取它们。 不知道你是否会做在Python类似的东西。



Answer 3:

什么,你需要做的是PHP脚本执行另一个脚本,并在服务器呼叫,然后向用户发送请求。



Answer 4:

你必须使用的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);


Answer 5:

你必须设置一个中间人。 因此,在你自己的服务器你会:

  • Web表单;
  • 一个提交处理(处理表单提交的PHP或者python脚本);
    • 你的处理程序创建一个新的文件,并提交数据填满它。 你可以,例如,格式化数据作为JSON;
    • 所以,你的处理程序都有一个作业,保存提交的数据在文件中并响应用户,没有别的。 这应该是快。
  • 创建文件系统事件驱动的cron(而不是时间驱动的cron)。 见这个和这个问题(在Windows和Ubuntu的服务器分别)。
    • 设置你的cron来执行PHP或者python脚本将然后将数据重新上传到远程服务器。


Answer 6:

水烟旨在解决您的问题。



文章来源: sending a non-blocking HTTP POST request