【问题标题】:PHP - Download cURL resultPHP - 下载 cURL 结果
【发布时间】:2013-01-10 06:55:20
【问题描述】:

我在下面写了函数:

function download_xfs($url)  
{
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_COOKIE, 'login=michael; xfss=08ruiweu4tuhb5xqs8');
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $string = curl_exec ($ch);  
    curl_close ($ch);  
    // Set headers
}

当我使用download_xfs("http://address.com/file.html"); 时,它返回文件的二进制文件而不是实际文件。任何人都可以重新编写此代码来处理下载文件吗?

【问题讨论】:

  • 二进制文件是什么意思? png 不是纯文本文件
  • 向我们提供指向您的 .html 的链接
  • 那个 png 是结果的截图。至于 html 文件,它并不重要。 $string 包含一个二进制源代码。

标签: php curl download binary


【解决方案1】:

您的错误不在于下载文件,PNG 可能已下载正常,但您可能只是将其回显到屏幕上。您必须为此文件 mime 类型设置适当的 HTTP 标头:

header('内容类型:图片/png');

但请记住不要在图像内容之前和之后回显任何其他字符串/字符(绝对没有,即使是 Windows 记事本在 php 文件开头创建的关于 UTF 的不可见 BOM 信息)。如果您想在您的 HTML 页面中包含可由您的服务器下载的图像,您必须使用此标头和图像内容创建另一个 .php 并通过以下方式包含它:

<img src="image_from_download.php">

如果您想接收纯文本,但有意外的二进制文件

远程服务器上可能有一些未知的解决方案,它会根据用户代理发送不同的内容或将您重定向到图像。

尝试将 cUrl 中的用户代理设置为与您的原始浏览器相同。

另外,通过在 HTTP 请求中发送正确的 Accept 标头,确保远程服务器提供的内容没有被压缩或分块(我不知道,卷曲会自动解压缩它吗?)。

这个问题也可能与状态有关,也许您需要设置一些 cookie 或登录远程 Web 应用程序,从那里检索 .html

尝试关闭您的FOLLOWLOCATION,也许您收到了 30x 重定向到图像。

【讨论】:

  • 嘿,我在上面编辑了我的问题,我认为你没有正确理解它。二进制不是 PNG 文件,它可以是我的意思的任何文件。我提供的那张图片只是一个截图。
  • 上面的变量 $string 包含二进制文件。我如何使用 header() 作为 ZIP 文件或其他文件等实际文件来处理下载。
  • 所以考虑到我的代码,我已经使用 cookie 登录到网络应用程序
  • 谢谢大家。我找到了解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 2014-04-05
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多