получить данные из URL-адреса, используя file_get_contents и cURL

Я использую codeigniter фреймворк.

Я хочу получить данные с предоставленного URL. Я уже пробовал эти ответы: пробовал.

Проблема в том, что когда я получаю доступ к URL-адресу, в это время он печатает данные. но когда я пробую это с функцией file_get_contents, она не будет печатать никаких данных.

<?php
$url ='https://test.com/getSessionData';
$test = file_get_contents($url);
$t = json_decode($test);
var_dump($t);
?>

Этот URL возвращает данные json, например:

{
    "email": "[email protected]",
    "LOGIN": true,
    "name": "testing",
    "logintype": "ca"
}

Также пробовал использовать cURL:

<?php
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
$curl_response = curl_exec($curl);
curl_close($curl);
$curl_jason = json_decode($curl_response, true);
print_r($curl_jason);
?>

Но он не работает и возвращается пустым. я проверил, что allow_url_fopen это on.


person Pathik Vejani    schedule 16.12.2015    source источник
comment
Добавьте код файла 'https://test.com/getSessionData'   -  person bIgBoY    schedule 16.12.2015
comment
@bIgBoY, пожалуйста, проверьте мой обновленный вопрос   -  person Pathik Vejani    schedule 16.12.2015
comment
Нажмите прямо https://test.com/getSessionData для просмотра и проверьте, что он возвращает.   -  person Saty    schedule 16.12.2015
comment
@Saty возвращает: { "email": "[email protected]", "LOGIN": true, "name": "testing", "logintype": "ca" }   -  person Pathik Vejani    schedule 16.12.2015
comment
Требует ли этот URL какое-либо состояние или сеанс для получения ответа?   -  person Parixit    schedule 16.12.2015
comment
@Parixit да .. требуется установка сеанса ..   -  person Pathik Vejani    schedule 16.12.2015
comment
@hnn Тогда, пожалуйста, проверьте stackoverflow.com/a/17376952/631652 или вы можете использовать CURL для поддержания сеанса.   -  person Parixit    schedule 16.12.2015
comment
@Parixit, что я сделал, я открыл 1 вкладку, на одной вкладке я вошел в систему, а на другой вкладке я печатаю этот сеанс URL, поэтому на второй вкладке он должен печатать данные, но не печатать ..   -  person Pathik Vejani    schedule 16.12.2015
comment
@Parixit, я тоже пробовал cURL, но не работает, позвольте мне проверить ссылку, которую вы дали .. и вернуться ..   -  person Pathik Vejani    schedule 16.12.2015
comment
Проверьте это stackoverflow.com/questions/1975461/   -  person Saty    schedule 16.12.2015
comment
@Сати, я получаю это openssl: yes http wrapper: yes https wrapper: yes   -  person Pathik Vejani    schedule 16.12.2015


Ответы (2)


Это может быть полезно

http://php.net/manual/en/migration56.openssl.php

Итак, код выглядит так:

<?php

$arrContextOptions=array(
    "ssl"=>array(
        "cafile" => "/path/to/bundle/ca-bundle.crt",
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    ),
);


$response = file_get_contents("https://test.com/getSessionData", false, stream_context_create($arrContextOptions));

echo $response; ?>
person Ninju    schedule 16.12.2015
comment
что должно быть в cafile? - person Pathik Vejani; 16.12.2015
comment
Путь к файлу сертификата ssl - person Ninju; 16.12.2015
comment
я не знаю, где это - person Pathik Vejani; 16.12.2015

Это класс, о котором я сказал:

/**
 * Created by PhpStorm.
 * User: rain
 * Date: 15/11/2
 * Time: 下午4:08
 */
class MyCurlLibrary{
    public static function getRequest($url,Array $data=array(),$isNeedHeader=0){
        $ch = curl_init();
        if($data){
            $bindQuery = http_build_query($data);
            $url.="?".$bindQuery;
        }
        curl_setopt($ch, CURLOPT_URL, $url);
        //if need return
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //this is for https
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HEADER, $isNeedHeader);//if contains header 
        //this is for web redirect problem
        //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }

    public static function postRequest($url,Array $data=array()){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        // post Data
        curl_setopt($ch, CURLOPT_POST, 1);
        // post variable
        if($data){
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        }
        $output = curl_exec($ch);
        curl_close($ch);
        //return data
        return $output;
    }

}

/**
 * sample
 *
 * //test Data
    $url = "http://localhost:8080/test/test.php";//改文件有代码  print_r($_GET);         print_r($_POST)
    $data = array('a'=>'b','c'=>'d',8=>666,888);
    //test get function
    $result = MyCurl::getRequest($url,$data);
    //test post function
    $result = MyCurl::postRequest($url,$data);
    //print result
    var_dump($result);
 *
 *
 */
person rain    schedule 16.12.2015
comment
используя phpinfo(), чтобы узнать, есть ли у вас это расширение. Если нет, попробуйте ‹a href=php.net/manual/en/openssl.installation.php›установить это‹/a› - person rain; 16.12.2015
comment
Извините за формат, я не могу сделать это правильно в комментарии. Какая у вас ОС, Linux / Mac или Win? - person rain; 16.12.2015
comment
Тогда я думаю, что вместо этого вы можете использовать curl. Вот класс, который я использовал, вы можете попробовать, если вам нужно, я добавлю его в ответ. - person rain; 16.12.2015
comment
не могли бы вы изменить язык комментариев в своем ответе - person Pathik Vejani; 16.12.2015
comment
Давайте продолжим обсуждение в чате. - person rain; 16.12.2015