繁体   English   中英

PHP-使用CURL认证和下载远程文件

[英]PHP - Using CURL to authenticate and download a remote File

我正在尝试使用php将变量发布到远程服务器上的另一个php以及远程服务器上的文件中,我想读取该文件并强制其下载。 远程服务器上的文件不在公共文件夹中,这就是为什么我需要首先调用该文件,以便它进行身份验证并获取受保护的文件的原因。

一切正常,但我什么也没回来。

在远程PHP上,我使用标准的readfile和标头下载文件。

我认为也许问题出在CURL设置上,我正在使用标准的CURL调用,当我调用CURL来下载文件时,是否需要使用任何特定的标头或设置?

这是我正在使用的CURL

$request = curl_init();
curl_setopt($request, CURLOPT_URL, $postURL);
curl_setopt($request, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($request, CURLOPT_VERBOSE, 0);
curl_setopt($request, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($request, CURLOPT_POST, 1);
curl_setopt($request, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);

$response = curl_exec($request);
curl_close($request);

$ postFields包含用于验证和确认另一台服务器上文件的变量。

在另一台服务器上,经过身份验证的php可以正常强制下载:

header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename="'.$newFileName.'"');
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($path));
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Expires: 0');

readfile($path);

谢谢!

编辑:嗨,我相信我找到了问题。 问题是,当我通过jquery上的。$ post调用本地服务器php时,curl中断了ajax调用

        $.post('local.php', $(this).serialize(), function(data){
            alert(data);
            }
        }, "json").fail(function() {
            alert('error');
        });

因此,我必须弄清楚如何通过jquery调用local.php,而不会破坏该过程。 谢谢你的帮助!

假设您在目标站点上使用基本的HTTP身份验证-您可以使用选项CURLOPT_USERPWD添加登录信息。

curl_setopt($request, CURLOPT_USERPWD, "$username:$password");

编辑 :关于ajax调用-如果服务器返回错误,jQuery将执行fail方法。 此外-您在ajax调用中将json指定为数据类型。 我认为下载不会返回json。

编辑2 :我不认为可以通过$.post下载,因为jQuery只知道xmlhtmlscriptjsonjsonptext 您可以尝试通过ajax请求进行身份验证,让ajax响应返回下载URL,将浏览器重定向到该目标。 或者,您可以尝试使用隐藏的iframe进行下载。 看看这些帖子( 这里这里 )-这个问题在这里详细讨论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM