我有这个函数来卷曲一个url(在我的代码点火器网站中):
private function _curl_download($Url){
if (!function_exists('curl_init')){
die('Sorry cURL is not installed!');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Url);
curl_setopt($ch, CURLOPT_REFERER, "http://local.mywebsite.com");
curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
if(curl_errno($ch)){
echo 'Curl error: ' . curl_error($ch);
}
$output = curl_exec($ch);
print_r(curl_getinfo($ch));
curl_close($ch);
return $output;
}
假设这会返回一个json,但它实际上是空白的。。。
$url = 'https://global.api.pvp.net/api/lol/static-data/euw/v1.2/champion?locale=fr_FR&api_key=myprivateapikey';
$info_champion = $this->_curl_download($url);
print_r($info_champion);
以下是curl_getinfo($ch)
返回给我的内容:
Array
(
[url] => https://global.api.pvp.net/api/lol/static-data/euw/v1.2/champion?locale=fr_FR&api_key=mysecretapikey
[content_type] =>
[http_code] => 0
[header_size] => 0
[request_size] => 0
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.391
[namelookup_time] => 0
[connect_time] => 0.219
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[redirect_url] =>
[primary_ip] => 52.8.176.206
[certinfo] => Array
(
)
[primary_port] => 443
[local_ip] => 192.168.1.104
[local_port] => 57748
)
链接在我的浏览器中工作,所以这不是问题所在。
我不明白哪里出了问题。谢谢你的帮助。
根据我的经验,在处理https
上的连接时,需要向curl请求添加更多参数,并提供cacert.pem
的副本。
private function _curl_download($url){
/* edit path to suit environment */
$cacert='c:/wwwroot/cacert.pem';
/* download a copy from: http://curl.haxx.se/ca/cacert.pem */
if (!function_exists('curl_init')){
die('Sorry cURL is not installed!');
}
$ch = curl_init();
if( parse_url( $url,PHP_URL_SCHEME )=='https' ){
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, 1 );
curl_setopt( $curl, CURLOPT_CAINFO, realpath( $cacert ) );
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, "http://local.mywebsite.com");
curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
if(curl_errno($ch)){
echo 'Curl error: ' . curl_error($ch);
}
$output = curl_exec($ch);
print_r(curl_getinfo($ch));
curl_close($ch);
return $output;
}
感谢@RamRaider,我做了一点搜索,发现我必须添加以下内容:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
一切都很顺利。