通常我在启动cURL时发布数据。我等待回复,解析等等......
我想简单地发布数据,而不是等待任何响应。 换句话说,我可以通过cURL将数据发送到Url,并立即关闭我的连接吗? (不等待任何回复,甚至等待网址是否存在)
这不是一件正常的事情,但无论如何我都在问。
这是我到目前为止所拥有的:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $MyUrl);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_to_send);
curl_exec($ch);
curl_close($ch);
答案 0 :(得分:6)
您可以通过旨在执行多个同时请求的curl_multi_*
函数来执行此操作 - 只需触发一个请求,而不需要请求响应。
如果脚本退出并且curl仍在运行,不确定会发生什么影响。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $MyUrl);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_to_send);
$mh = curl_multi_init();
curl_multi_add_handle($mh,$ch);
$running = 'idc';
curl_multi_exec($mh,$running); // asynchronous
// don't bother with the usual cleanup
答案 1 :(得分:6)
我认为实际上没有从远程服务器接收整个响应的唯一方法是使用CURLOPT_WRITEFUNCTION
。例如:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $MyUrl);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_to_send);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'do_nothing');
curl_exec($ch);
curl_close($ch);
function do_nothing($curl, $input) {
return 0; // aborts transfer with an error
}
重要提示
CURLOPT_RETURNTRANSFER
的值,因为这会干扰写回调。答案 2 :(得分:-1)
不确定这是否有帮助,但是通过命令行我想你可以使用'--max-time'选项 - “允许整个操作采用的最长时间(以秒为单位)。”
我必须做一些快速而又脏的事情,并且不想重新编写代码或等待响应,所以在curl手册中找到了--max-time选项
curl --max-time 1 URL