gpt4 book ai didi

PHP cURL 只需要发送而不等待响应

转载 作者:IT王子 更新时间:2023-10-29 00:03:42 25 4
gpt4 key购买 nike

我需要一个 PHP cURL 配置,以便我的脚本能够发送请求并忽略 API 发送的答案。

curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
//curl_setopt($ch, CURLOPT_TIMEOUT_MS, 100);
$result = curl_exec($ch);
echo $result;
curl_close ($ch);

我尝试添加://curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);//curl_setopt($ch, CURLOPT_TIMEOUT_MS, 100);

但它无法正常工作并且 API 网络服务器未收到请求。

这是因为我向 API 发送了大量请求,因此我的脚本非常慢,因为它会等待每个请求。

感谢任何帮助。

最佳答案

发件人文件示例./ajax/sender.php

脚本发送 POST -> 它向主机发出完整请求,但它不等待服务器的回答:CURLOPT_HEADER(0) 我们不需要来自服务器的 header ) 和 CURLOPT_RETURNTRANSFER (false) 我们不需要来自服务器的数据.CURLOPT_TIMEOUT - 额外保护:我们在响应服务器上仅发送 1 毫秒后等待,这是额外的保证,如果服务器保留我们,则不再等待毫秒。 ### 注意### HTTP1.1 一个包最大16kb。 HTTP2 有 36kb 一包。如果 POST 更大,服务器将发送许多系列的包 = $SIZE%16kb

    $url = 'https://127.0.0.1/ajax/received.php';
$curl = curl_init();
$post['test'] = 'examples daata'; // our data todo in received
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt ($curl, CURLOPT_POST, TRUE);
curl_setopt ($curl, CURLOPT_POSTFIELDS, $post);

curl_setopt($curl, CURLOPT_USERAGENT, 'api');

//curl_setopt($curl, CURLOPT_TIMEOUT, 1); //if your connect is longer than 1s it lose data in POST better is finish script in recevie
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt($curl, CURLOPT_FORBID_REUSE, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 1);
curl_setopt($curl, CURLOPT_DNS_CACHE_TIMEOUT, 100);

curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);

curl_exec($curl);

curl_close($curl);

接收文件示例./ajax/received.php

    ignore_user_abort(true); //if connect is close, we continue php script in background up to script will be end

header("Connection: close\r\n");
header("Content-Encoding: none\r\n");
header("Content-Length: 1");
### we just close connect above if webbrowser, or request waiting on answer ( we know we set CURLOP to not wait) ###
ob_end_clean(); //just flush all content if exists to request. If server still waiting on answer.
//HERE all script doing in background: Example
$this->db->query('UPDATE new_hook_memory SET new=new+1 WHERE id=1');

编辑 2019,如果您使用 fastcgi 刚刚完成 fastcgi 并且浏览器关闭连接,但脚本仍将运行到结束。

如何完成脚本: PHP mod_fcgi with fastcgi_finish_request();

对于 Apache2:

ob_end_flush();
flush();

对于 php-fpm

fastcgi_finish_request(); $this->db->query('UPDATE new_hook_memory SET new=new+1 WHERE id=1');

旧版本:

关于PHP cURL 只需要发送而不等待响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8024821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com