Я создаю клиент веб-сервиса 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 
  Вот список других.