【问题标题】:php curl super long url malformedphp curl超长url格式错误
【发布时间】:2013-03-13 10:21:07
【问题描述】:

我有一个长 url 嵌套在一个变量中:$mp4,并尝试使用 curl 下载它,但出现格式错误的错误。如果可以,请帮助我,提前谢谢!

以下是我的 php 脚本中的内容:

exec("curl -o $fnctid.mp4 \"$mp4\"");

错误信息:

curl: (3) <url> malformed

测试下载的示例网址:

http://f26.stream.nixcdn.com/6f4df1d8c248cf149b846c24d32f1c35/514e0209/PreNCT5/22-TaylorSwift-2426783.mp4

【问题讨论】:

  • 如果替换变量,生成的命令会是什么样子?例如echo '&lt;pre&gt;'; echo "curl -o $fnctid.mp4 \"$mp4\""; echo '&lt;/pre&gt;';。此外,您知道 PHP 提供了对 curl 的支持,而无需使用 exec/命令行:php.net/manual/en/curl.examples-basic.php
  • 如果我将 url 放入其中,它实际上可以工作,但是当我使用变量而不是...
  • 这样试试:exec("curl -o " . $fnctid" . ".mp4 \"" . $mp4 . "\""); 我怀疑问题出在.直接在字符串里面的变量后面
  • 我也尝试将其放入变量中,但仍然无法正常工作......

标签: php curl malformed


【解决方案1】:

当前的 url 返回 408 - Request Timeout 如果这是固定的,你就是这个简单的代码:

$url = 'http://f26.stream.nixcdn.com/6f4df1d8c248cf149b846c24d32f1c35/514e0209/PreNCT5/22-TaylorSwift-2426783.mp4';
$useragent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2';


$file = __DIR__ . DIRECTORY_SEPARATOR . basename($url);
$fp = fopen($file, 'w+');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, 320);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
echo curl_exec($ch);

var_dump(curl_getinfo($ch));   // return request information 


curl_close($ch);
fclose($fp); 

【讨论】:

  • 这完美无瑕!但是,我的旧方法今天也有效,因为我刚刚意识到我的 url 中有空格。
【解决方案2】:

这个错误可以通过使用urlencode解决

 $url = urlencode ( $url )

此函数在编码要用于 URL 查询部分的字符串时很方便,作为传递变量的便捷方式。

希望这个解决办法

【讨论】:

  • 我试过了,它也不起作用...示例网址:f26.stream.nixcdn.com/6f4df1d8c248cf149b846c24d32f1c35/514e0209/…
  • 嗯,根据该 URL 的名称,这似乎是一个“流”,而不是常规文件。您可能无法下载!
  • 如果我直接从 shell wget 或 curl 它怎么会正常工作?
  • 嗯,不知道,不知道我能不能进一步帮助你
  • 太不幸了,我期待着得到这个。还是谢谢。
猜你喜欢
  • 2014-07-21
  • 1970-01-01
  • 2016-06-28
  • 2015-06-25
  • 2018-11-03
  • 1970-01-01
  • 2012-08-05
  • 2019-06-03
  • 1970-01-01
相关资源
最近更新 更多