Как отправить OData в RESTful API в запросе PHP cURL

Я пытаюсь отправить параметры OData в запросе GET в API RESTful, используя 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?

3

Решение

Присоединение параметров 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);
7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]