Вот таким способом шлю:
$headers = array(
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding: gzip, deflate, br",
"Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
"Host:
geocode-maps.yandex.ru",
'If-None-Match: W/"766-t1XZdALER3BiyuoT7w8nlpgQQ4M"',
"Upgrade-Insecure-Requests: 1",
"User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:74.0) Gecko/20100101 Firefox/74.0"
);
$arrContextOptions=array(
"ssl"=>array(
"SNI_enabled" =>true
),
'http' => array(
'method' => 'GET',
'header' => $headers
)
);
$url = preg_replace( '/([\s]+)/is', '+', $geo_api_url);//на этом этапе url получается со всеми нужными токенами/параметрами, при вставке его в браузер дает корректный ответ
$json = file_get_contents($url, false, stream_context_create($arrContextOptions));//тут ответ приходит, но с пустым массивом геообъектов и кракозябрами в параметрах исходного запроса