卷曲请求无法在实时服务器上运行

时间:2011-08-16 08:05:17

标签: php http curl download

有人能告诉我为什么这个CURL代码只能在我的本地服务器上运行而不能在实时服务器上运行吗? 试过3个不同的主机,没有任何作用。

现场检查所有内容 1)启用卷曲 2)PHP版本没问题 3)Curl执行时没有任何错误但没有结果

已经3天了,我无法找到任何解决方案 请帮忙。

error_reporting(1);
set_time_limit(1500);

$fname=time().'_myfile.flv';
header('Content-type: video/x-flv');
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$fname\"");

define('USERAGENT', "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)");
$url='http://v3.lscache5.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor&fexp=914010%2C907605&algorithm=throttle-factor&itag=34&ip=112.0.0.0&burst=40&sver=3&signature=D51A660BDF83B54B3584425DBE8930D5D0F805E1.B3FB21D0CAF625D36A17B558A0A653F20788B49F&expire=1313503200&key=yt1&ipbits=8&factor=1.25&id=1cacd26a9913e4ec';


    $ch = curl_init() or die("Error");
    curl_setopt($ch, CURLOPT_USERAGENT, USERAGENT);
    curl_setopt($ch, CURLOPT_URL, $url);    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);  
    if(curl_exec($ch) === FALSE) 
    {
        die("Curl failed: " . curl_error($ch));  // Never goes here
    }

    curl_close($ch);

>

5 个答案:

答案 0 :(得分:4)

我有几天这个问题,无法在PHP中找到任何错误,而cURL响应似乎完全无效。最后发现建议的代码放入cURL请求

if (curl_exec($curl) === FALSE) {
   die("Curl Failed: " . curl_error($curl));
} else {
   return curl_exec($curl);
}

添加这个最终给了我一个PHP错误:

  

卷曲失败:SSL证书问题,验证CA证书是否正常。   详细信息:错误:14090086:SSL   例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败

在SO上搜索该错误给了我:HTTPS and SSL3_GET_SERVER_CERTIFICATE:certificate verify failed, CA is OK

这导致我向我的cURL请求添加基本上禁用SSL验证的代码。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

我没有与我的服务器管理员一起工作以找到更好的解决方案,因为我不知道这种解决方法是否如此优秀,但现在可行。

答案 1 :(得分:2)

在exec之后执行curl_getinfo($ch)以查看服务器返回的响应代码。

答案 2 :(得分:1)

测试
error_reporting(E_ALL);

答案 3 :(得分:0)

要检查的一些事项:

  1. 您对error_reporting()的价值非常奇怪:1 equals E_ERROR并暗示您几乎忽略了所有内容,包括警告。我甚至不会在生产中推荐它,更不用说开发了。

  2. 您定义$header_list并且从不使用它。

  3. 确保检查实际输出,而不是浏览器呈现的输出。

答案 4 :(得分:0)

我确定它将为您提供帮助(我已经单独解决了这个问题几天了)

将代理添加到您的cURL:

(当数组中包含crul_opt时的选项)

 CURLOPT_USERAGENT => 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100508 SeaMonkey/2.0.4',

(单独设置卷曲的选项)

curl_setopt($curl,CURLOPT_USERAGENT,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:7.0.1) Gecko/20100101 Firefox/7.0.1');

我注意到它有效是因为postman给了我我无意间粘贴到文件中的代码,尽管它不包含代理(对于localhost和在postman中起作用),并且实时托管不支持它。 (邮递员本人添加他的经纪人)