首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Curl返回空api

Curl返回空api
EN

Stack Overflow用户
提问于 2015-11-01 21:47:11
回答 2查看 108关注 0票数 1

我有这个函数来卷曲一个url (在我的codeigniter网站上):

代码语言:javascript
复制
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,但它实际上是空白的。

代码语言:javascript
复制
$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)返回给我的内容:

代码语言:javascript
复制
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
)

该链接在我的浏览器中工作,所以这不是问题所在。

我不明白哪里会错。谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2015-11-01 22:25:06

根据我的经验,在处理通过https的连接时,您需要向curl请求添加更多参数,并准备一份可用的cacert.pem副本。

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2015-11-01 22:43:48

感谢@RamRaider,我做了一些搜索,我发现我必须添加以下内容:

代码语言:javascript
复制
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );

一切都很顺利。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33462812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档