有人能告诉我为什么这个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);
>
答案 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)
要检查的一些事项:
您对error_reporting()的价值非常奇怪:1
equals E_ERROR
并暗示您几乎忽略了所有内容,包括警告。我甚至不会在生产中推荐它,更不用说开发了。
您定义$header_list
并且从不使用它。
确保检查实际输出,而不是浏览器呈现的输出。
答案 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中起作用),并且实时托管不支持它。 (邮递员本人添加他的经纪人)