У меня есть эта функция, чтобы свернуть URL (на моем сайте codeigniter):
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 );
и все прошло правильно.