【问题标题】:Transalte curl command to PHP将 curl 命令翻译成 PHP
【发布时间】:2017-12-20 00:50:08
【问题描述】:

你好,我有这个下载压缩文件的 Linux 命令

curl -L -O http://www.url.com

问题是当我在 PHP 中进行 curl 时,我得到的是 HTML 代码而不是压缩文件。

PHP 代码是这样的:

$url = https://www.example.com
$filePath = '/app/storage/temp/' . $fileName;
$fp = fopen($filePath . 'me', "w");
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_FTPAPPEND, 0);
curl_setopt($ch, CURLOPT_FILE, $fp);

$data = curl_exec($ch);
fwrite($fp, $data);
curl_close($ch);
fclose($fp);

我无法分享真实的 URL,因为它包含密钥。

编辑

当我将-L -O 选项添加到它开始工作的curl 命令时,curl 命令下载了与 curl 命令相同的HTML 文件,所以这里的问题是,我如何使用@987654328 添加这些行@

【问题讨论】:

  • 很难说没有实际的 URL 来试一试,但我敢打赌他们已经专门阻止了机器人或 cURL 客户端的访问。
  • 你的例子没有显示 $url 被设置。 $data 中的 HTML 是什么?是错误页面吗?
  • @ceejayoz 我认为他们没有阻止 curl 客户端,因为如果我在 Linux 终端中运行该命令,它会下载文件
  • 嗯。使用 google.com 作为 URL 检查您的原始代码,它工作正常。这可能特定于您点击的 URL。也许检查返回结果,转储 curl_getinfo 等?

标签: php file url curl


【解决方案1】:

使用 CURL_FILE 意味着将输出写入文件句柄。你不需要也使用fwrite(特别是因为没有设置CURLOPT_RETURNTRANSFER,curl_exec 的返回只是真或假)。

如果确实可以从此 URL 加载,请删除 fwrite,或删除 CURLOPT_FILE 并使用:

curl_setopt($ch, CUROPT_RETURNTRANFER, TRUE)

这样,curl_exec 的返回将是加载的数据。

【讨论】:

  • 我已经尝试了两种方法,使用 fwrite 和 tge CURLOPT_FILE,它只是下载 HTML :c 我还添加了你告诉我的那行,但都是一样的
  • 在进一步测试中,这个解决方案甚至没有必要。查看对问题的评论!
【解决方案2】:

在您要下载文件的位置创建一个空的 zip 文件。

function downloadFile($url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
  curl_setopt($ch, CURLOPT_TIMEOUT, 60);
  set_time_limit(65);

  $rawFileData = curl_exec($ch);
  $info = curl_getinfo($ch);

  if (curl_errno($ch)) {
    return  curl_error($ch);
  }
  curl_close($ch);
  $filepath = dirname(__FILE__) . '/testfile.zip';
  file_put_contents($filepath, $rawFileData); // Put the downloaded content in the file
  return $info;
}

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    大家很抱歉,因为我无法提供有关我的疑问的太多信息,所以让你们为难了。

    问题解决了,我意识到 URL 确实可以使用

    curl -O -L htttp://www.example.com
    

    也可以通过网络浏览器。

    最后一件事实际上是给了我路径的那件事:

    1. 打开网络浏览器
    2. 点击F12
    3. 粘贴网址并回车

    我意识到我需要添加一些标题,这些标题是:

    accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    
    accept-encoding:gzip, deflate, br
    
    accept-language:en-US,en;q=0.8,es-MX;q=0.6,es;q=0.4
    
    user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
    

    在我将这些标头添加到 PHP 中的 curl 后,结果就是我正在搜索的压缩 zip 文件。

    【讨论】:

      猜你喜欢
      • 2017-06-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多