Как сделать запрос с использованием базовой аутентификации HTTP с помощью PHP curl?

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