Зачем мне нужен curl-ca-bundle.crt? - PullRequest
0 голосов
/ 13 марта 2020

Для колледжа я создал динамический c новостной сайт, который использует openweathermap и ipinfo , чтобы создать небольшую строку информации о погоде на панели навигации. Первоначально он выдавал ошибку «сбой загрузки потока», которая была решена путем установки сертификата CA в xampp / Apache / bin.

У меня есть смутное представление о том, что это делает - что-то, связанное с проверкой Сертификат сервера peer действителен, но я подумал, что это было необходимо, только если вы используете библиотеку 'curl'? Я не уверен, где в моем коде я использовал это, если это не связано с тем, где я получаю информацию с одного из URL? Просто ищу разъяснения о том, где в коде используется curl, что он делает и почему именно мне нужен этот сертификат. Кроме того, в качестве дополнительного пункта, если бы я отправил свои файлы другому человеку, пришлось бы им также установить этот файл .crt в xampp / apache / bin?

$query = @unserialize (file_get_contents('http://ip-api.com/php/'));

if ($query && $query['status'] == 'success') {
foreach ($query as $data) {
     $data . "<br>";
}
}

$url="https://api.openweathermap.org/data/2.5/find?q=" . $query['city'] . "," . $query['countryCode'] . "&units=imperial&type=accurate&mode=xml&APPID=MYKEYCODE";

/*Converts an XML document to an object we can pull our info from*/

$getweather = simplexml_load_file($url);
$gettemp = $getweather->list->item->temperature['value'];
$celcius = ($gettemp - 32) * 5/9;

Спасибо!

1 Ответ

0 голосов
/ 13 марта 2020

Немного измененная версия, которую я попробовал, была следующей (для простоты использовалось json вместо XML):

<code>$appkey='xxxxxxxxxx165be29428029b';
$data=(object)@unserialize( file_get_contents('http://ip-api.com/php/') );
if( $data ){
    $city=$data->city;
    $countryCode=$data->countryCode;

    $url=sprintf('https://api.openweathermap.org/data/2.5/find?q=%s,%s&units=imperial&type=accurate&mode=json&APPID=%s',$city,$countryCode,$appkey);
    $json=json_decode( file_get_contents( $url ) ) ?: false;

    if( $json ){
        $temp=$json->list[0]->main->temp;
        $celcius=( ( $temp - 32 ) * 5/9 );

        printf("<pre>City: %s\nCountry: %s\nTemperature: %sF (%sC)
", $ city, $ countryCode, $ temp, $ celcius);}}

Который дал:

City: Sheffield
Country: GB
Temperature: 42.17F (5.65C)

Что немного странно, поскольку я никогда не был в Шеффилде, и это далеко не то место, где я живу, но я знаю, что мои маршруты ISP traffi c все через reekin, чтобы гео-местоположение и c никогда не работали. Кроме того, не было никаких ошибок и нет требования для действительного cacert

удачи

...