卷曲返回空白api



我有这个函数来卷曲一个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 );

一切都很顺利。

最新更新