如何将PHP cURL POST请求发送到URL,接收文件并提供给用户下载


How to send a PHP cURL POST request to a URL, receive a file and give to the user download?

有一个url,当我传递一些POST参数时,它会给我一个要下载的文件。让我的服务器下载该文件,并在下载时发送给用户的最佳方法是什么?

提前感谢

这取决于你想对响应做什么,但最简单的方法就是设置CURLOPT_RETURNTTRANSFER并输出响应:

$ch = curl_init("http://stackoverflow.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resp = curl_exec($ch);
curl_close($ch);
echo $resp;

不要忘记curl_exec在失败时返回FALSE,所以您可能也应该检查一下:

if ($resp === false) die('Unable to contact server');

如果您也想将响应保存在服务器上(而不是上面的方法,它基本上只是一个哑代理),您可以使用CURLOPT_WRITEFUNCTION。

$fp = fopen('my_file', 'w');
$ch = curl_init("http://stackoverflow.com/");
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'writefunc');
curl_exec($ch);
curl_close($ch);
fclose($fp);
function writefunc($ch, $data) {
    global $fp;
    echo $data;
    return fwrite($fp, $data);
}

write函数接受两个参数(curl句柄、数据),并需要写入的数据量的返回值(在我们的例子中,还需要输出的数据量)。

我会使用cURL来完成整个过程。

我目前没有关于我的参考,但至少对于multi-cURL,可以有一个回调函数,当一大块数据进入时就会触发。当这种情况发生时,你会将数据回显到你的客户端。