Я создаю клиент веб-сервиса REST в PHP, и на данный момент я использую завиток, чтобы делать запросы к сервису.
Как использовать завиток для выполнения аутентифицированных (HTTP-базовых) запросов? Должен ли я сам добавлять заголовки?
Вы хотите это:
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
У Zend есть клиент REST и zend_http_client, и я уверен, что PEAR имеет своего рода оболочку. Но его достаточно легко сделать самостоятельно.
Таким образом, весь запрос может выглядеть примерно так:
$process = curl_init($host); curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', $additionalHeaders)); curl_setopt($process, CURLOPT_HEADER, 1); curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password); curl_setopt($process, CURLOPT_TIMEOUT, 30); curl_setopt($process, CURLOPT_POST, 1); curl_setopt($process, CURLOPT_POSTFIELDS, $payloadName); curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE); $return = curl_exec($process); curl_close($process);
CURLOPT_USERPWD
основном отправляет base64 user:password
строка user:password
с заголовком http, как CURLOPT_USERPWD
ниже:
Authorization: Basic dXNlcjpwYXNzd29yZA==
Таким образом, помимо CURLOPT_USERPWD
вы также можете использовать параметр заголовка HTTP-Request
как и ниже, с другими заголовками:
$headers = array( 'Content-Type:application/json', 'Authorization: Basic '. base64_encode("user:password") // <--- ); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
Самый простой и родной способ напрямую использовать CURL.
Это работает для меня:
<?php $login = 'login'; $password = 'password'; $url = 'http://your.url'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "$login:$password"); $result = curl_exec($ch); curl_close($ch); echo($result);
В отличие от SOAP, REST не является стандартизованным протоколом, поэтому немного сложно получить «REST Client». Однако, поскольку большинство служб RESTful используют HTTP в качестве своего основного протокола, вы должны иметь возможность использовать любую HTTP-библиотеку. В дополнение к cURL, PHP имеет это через PEAR:
HTTP_Request2
который был заменен
HTTP_Request
Пример использования HTTP Basic Auth
// This will set credentials for basic auth $request = new HTTP_Request2('http://user:password@www.example.com/secret/');
Поддержка Digest Auth
// This will set credentials for Digest auth $request->setAuth('user', 'password', HTTP_Request2::AUTH_DIGEST);
Yahoo имеет учебное пособие по вызову своих служб REST с использованием PHP:
Сделать Yahoo! Веб-службы REST звонки с PHP
Я не использовал его сам, но Yahoo является Yahoo и должен гарантировать, по крайней мере, некоторый уровень качества. Однако, похоже, они не охватывают запросы PUT и DELETE.
Кроме того, пользовательские примечания к curl_exec () и другие содержат много хорошей информации.
Майкл Доулинг очень активно поддерживает Гузлэ – хороший способ пойти. Помимо элегантного интерфейса, асинхронного вызова и соответствия PSR, он делает заголовки аутентификации для вызовов REST мертвыми просто:
// Create a client with a base URL $client = new GuzzleHttp\Client(['base_url' => 'http://myservices.io']); // Send a request to http://myservices.io/status with basic authentication $response = $client->get('/status', ['auth' => ['username', 'password']]);
См. Документы .
Если тип авторизации – Basic auth, а данные – json, тогда выполните следующие действия:
<?php $data = array("username" => "test"); // data u want to post $data_string = json_encode($data); $api_key = "your_api_key"; $password = "xxxxxx"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://xxxxxxxxxxxxxxxxxxxxxxx"); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERPWD, $api_key.':'.$password); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Accept: application/json', 'Content-Type: application/json') ); if(curl_exec($ch) === false) { echo 'Curl error: ' . curl_error($ch); } $errors = curl_error($ch); $result = curl_exec($ch); $returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo $returnCode; var_dump($errors); print_r(json_decode($result, true));
Там есть несколько структур REST. Я бы настоятельно рекомендовал посмотреть в Slim mini Framework для PHP
Вот список других.