Как отправить OData в RESTful API в PHP cURL Request
3 Typel [2016-02-19 21:25:00]
Я пытаюсь отправить параметры OData в GET-запрос RESTful API с помощью PHP. Правильно отформатированный запрос OData для этой службы выглядит следующим образом:
https://myapi.org/endpoint?filter=family_name eq 'Doe'
Кажется, что я должен просто добавить эти переменные в конец моего CURLOPT_URL
перед отправкой запроса, но служба API, похоже, не получает OData.
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('OSDI-API-Token:xxxxxxxxxxxx'));
curl_setopt($ch, CURLOPT_URL, "https://myapi.org/endpoint?filter=family_name eq 'Doe'");
$response = curl_exec($ch);
curl_close($ch);
echo "<pre>";
print_r($response);
echo "</pre>";
Вывод NULL
. Это кажется странным ответом, учитывая, что этот же запрос с идентичными заголовками и одним и тем же URL-адресом Odata ищет и находит правильные данные в браузере API.
Может ли кто-нибудь подтвердить, является ли это правильным способом отправки параметров OData с помощью запроса cURL?
api php curl odata
1 ответ
7 Решение Typel [2016-02-19 22:04:00]
Добавление параметров OData непосредственно к CURLOPT_URL
не работает, потому что оно не образует действительный URL. Пробелы и кавычки должны быть экранированы как family_name%20eq%20%27Doe%27
или family_name+eq+%27Doe%27
.
Простейшим способом было бы использовать http_build_query()
для присоединения параметров к URL до установки CURLOPT_URL
:
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('OSDI-API-Token: xxxxxxxxxx'));
$api_request_parameters = array('filter'=>"family_name eq 'Doe'");
$api_request_url = "https://myapi.org/endpoint";
$api_request_url .= "?".http_build_query($api_request_parameters);
$curl_setopt($ch, CURLOPT_URL, $api_request_url);
$response = curl_exec($ch);
curl_close($ch);