@Kerm

Curl в ссылке заменяет & на & из-за этого удаленный API не видит передаваемый параметер?

Метод:

Сначала пробует сделать file_get_contents если не получается то curl, file_get_contents вываливается с ошибкой:

[18-Apr-2023 19:13:19 Europe/Moscow] PHP Warning:  file_get_contents(http://geocode-maps.yandex.ru/1.x/?apikey=API_KEY&geocode=%D0%A5%D0%B8%D0%BC%D0%BA%D0%B8): failed to open stream: HTTP request failed!


/**
     * @param string $url
     * @param int $timeout
     * @return bool|SimpleXMLElement
     */
    private function simpleXmlLoadFileFromUrl(string $url, int $timeout = 20) {
        $opts = ['http' => ['timeout' => (int)$timeout]];
        $context  = stream_context_create($opts);
        $data = file_get_contents($url, false, $context);

        if (!$data) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_TIMEOUT, 10);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_URL, $url);

            $data = curl_exec($ch);

            if ($data)
                return simplexml_load_file($data);
        }

        return simplexml_load_string($data);
    }


Получается такая API ссылка:

https://geocode-maps.yandex.ru/1.x/?apikey=API_KEY...

И далее api yandex'a почему то не понимает что & это &

В самом $url указано правильно, но как только curl вызывает эту ссылку там уже идет &
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Безотносительно к проблеме с неизвестно откуда берущимся кодированием, чем не устроил вариант
simplexml_load_file($url);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы