【问题标题】:cURL is returning 404 on a file that exists (remote server). Why?cURL 在存在的文件(远程服务器)上返回 404。为什么?
【发布时间】:2011-03-18 01:02:15
【问题描述】:

我正在检查是否存在某些 mp3。虽然有时没有问题,但某些有效的 mp3 文件显示为 404,未找到。这是我正在使用的代码:

$ch = @curl_init($file_path);
@curl_setopt($ch, CURLOPT_HEADER, true);
@curl_setopt($ch, CURLOPT_NOBODY, true);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

@curl_exec($ch);
$header = curl_getinfo($ch);
curl_close($ch);
echo "<pre>";
print_r($header);
echo "<pre>";

我认为问题是因为网站使用了重定向,但将“CURLOPT_FOLLOWLOCATION”设置为 TRUE 并没有解决问题。

http 代码在以下 mp3 上显示 404。您可以在浏览器中访问它们并查看它们是否有效。这些只是许多有此问题的随机示例:

http://audio.arjlover.net/audio/pesni/Babies_go_series/Babies%20Go%20Beatles/01%20Hey%20Jude%20Beatles.mp3

http://www.dagatinha.com.br/musicas/Lady%20Gaga%20%20-%20Just%20Dance.mp3

【问题讨论】:

  • 在不相关的说明中,您是否碰巧拥有这些音乐文件的版权?
  • @DevSolar:你是在问 user371699 是否真的是 Lady Gaga?
  • Lady Gaga 会使用 Ruby
  • 我没有检查,但是如果某些服务器端脚本无法识别您的用户-argent,它可能会返回 404
  • $file_path 包含什么?

标签: php curl


【解决方案1】:

基本上:

@curl_exec($ch);

您假设 curl 已正确执行,并丢弃其返回值。如果执行查询时出现问题,exec 返回 false 并且 curl_error 和 curl_errno 将包含关于什么爆炸以及如何爆炸的诊断信息。永远不要假设 curl 成功了。它失败的原因太多了,但成功的方法只有一种。至少,将您的代码更改为:

if (curl_exec($ch) === FALSE) {
    die("Curl error: " . curl_error($ch));
}

看看为什么事情会死。否则,您只会得到奇怪的结果,并失去了了解它们发生原因的任何机会。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2017-07-06
    相关资源
    最近更新 更多