Настроить заголовки для cURL дли кириллических запросов
Настраиваю cURL для работы c API
Headers:
'cache-control: max-age=0',
'upgrade-insecure-requests: 1',
'user-agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36',
'sec-fetch-user: ?1',
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'x-compress: null',
'sec-fetch-site: none',
'sec-fetch-mode: navigate',
'accept-encoding: deflate, br',
'accept-language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
При запросе https://api.site.ru/vacancies?text=PHP все работает.
Но на https://api.site.ru/vacancies?text=Программист результатов нет.
Ответ: {"items":[],"found":0,"pages":1,"per_page":20,"page":0,"clusters":null,"arguments":null,"alternate_url":"https://site.ru/search/vacancy?enable_snippets=true&text=%D0%A0%D1%9F%D0%A1%D0%82%D0%A0%D1%95%D0%A0%D1%96%D0%A1%D0%82%D0%A0%C2%B0%D0%A0%D1%98%D0%A0%D1%98%D0%A0%D1%91%D0%A1%D0%83%D0%A1%E2%80%9A}
Хотя, если ввести тот же запрос в строку браузера - результаты есть.
Ответы (1 шт):
В общем без кода можно предположить только одно - вы пытаетесь передать напрямую кириллицу, которую по стандарту необходимо преобразовать, поскольку url может содержать только определенные символы (для информации читаем https://en.wikipedia.org/wiki/Percent-encoding)
В php это можно сделать двумя способами - стандартной функцией php urlencode или функцией библиотеки curl curl_escape
Пример:
<?php.
$ch = curl_init();
// Строки, содержащие пробелы, латиницу,спецсимволы и т.п. необходимо предварительно кодировать в escape-последовательности
$query = curl_escape($ch, 'Программист');
// Тперь из этого добра можно собрать полный uri
$url = "https://api.site.ru/vacancies?text={$query}";
echo "urlencoded строка будет такой: {$url}\n";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
$output = curl_exec($ch);
echo $output;
curl_close($ch);
?>