Réponses:
Tu veux ça:
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
Zend a un client REST et zend_http_client et je suis sûr que PEAR a une sorte de wrapper. Mais c'est assez facile à faire par vous-même.
Ainsi, la demande entière pourrait ressembler à ceci:
$ch = curl_init($host);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', $additionalHeaders));
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payloadName);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($ch);
curl_close($ch);
CURLOPT_USERPWD
envoie essentiellement la base64 de la user:password
chaîne avec l'en-tête http comme ci-dessous:
Authorization: Basic dXNlcjpwYXNzd29yZA==
Donc, à part le, CURLOPT_USERPWD
vous pouvez également utiliser l' HTTP-Request
option d'en-tête comme ci-dessous avec d'autres en-têtes:
$headers = array(
'Content-Type:application/json',
'Authorization: Basic '. base64_encode("user:password") // <---
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
CURLOPT_USERPWD
fonctionné pour moi.
La manière la plus simple et native consiste à utiliser directement CURL.
Cela fonctionne pour moi:
<?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);
Contrairement à SOAP, REST n'est pas un protocole standardisé, il est donc un peu difficile d'avoir un "client REST". Cependant, étant donné que la plupart des services RESTful utilisent HTTP comme protocole sous-jacent, vous devriez pouvoir utiliser n'importe quelle bibliothèque HTTP. En plus de cURL, PHP a ces derniers via PEAR:
qui a remplacé
Un exemple de la façon dont ils font l'authentification HTTP de base
// This will set credentials for basic auth
$request = new HTTP_Request2('http://user:password@www.example.com/secret/');
Ils prennent également en charge Digest Auth
// This will set credentials for Digest auth
$request->setAuth('user', 'password', HTTP_Request2::AUTH_DIGEST);
Si le type d'autorisation est Authentification de base et que les données publiées sont json, faites comme ceci
<?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));
Yahoo a un tutoriel sur la façon d'appeler leurs services REST en utilisant PHP:
Faites Yahoo! Appels REST de service Web avec PHP
Je ne l'ai pas utilisé moi-même, mais Yahoo est Yahoo et devrait garantir au moins un certain niveau de qualité. Cependant, ils ne semblent pas couvrir les demandes PUT et DELETE.
En outre, les notes contribuées par l' utilisateur à curl_exec () et autres contiennent de nombreuses bonnes informations.
Il vous suffit de spécifier les options CURLOPT_HTTPAUTH et CURLOPT_USERPWD:
$curlHandler = curl_init();
$userName = 'postman';
$password = 'password';
curl_setopt_array($curlHandler, [
CURLOPT_URL => 'https://postman-echo.com/basic-auth',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $userName . ':' . $password,
]);
$response = curl_exec($curlHandler);
curl_close($curlHandler);
Ou spécifiez l'en-tête:
$curlSecondHandler = curl_init();
curl_setopt_array($curlSecondHandler, [
CURLOPT_URL => 'https://postman-echo.com/basic-auth',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Basic ' . base64_encode($userName . ':' . $password)
],
]);
$response = curl_exec($curlSecondHandler);
curl_close($curlSecondHandler);
Exemple de buse:
use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
$userName = 'postman';
$password = 'password';
$httpClient = new Client();
$response = $httpClient->get(
'https://postman-echo.com/basic-auth',
[
RequestOptions::AUTH => [$userName, $password]
]
);
print_r($response->getBody()->getContents());
Voir https://github.com/andriichuk/php-curl-cookbook#basic-auth
Guzzle très activement entretenu de Michael Dowling est une bonne façon de procéder. Outre l'interface élégante, les appels asynchrones et la conformité PSR, il rend les en-têtes d'authentification pour les appels REST très simples:
// 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']]);
Voir les documents .
Pour ceux qui ne veulent pas utiliser curl:
//url
$url = 'some_url';
//Credentials
$client_id = "";
$client_pass= "";
//HTTP options
$opts = array('http' =>
array(
'method' => 'POST',
'header' => array ('Content-type: application/json', 'Authorization: Basic '.base64_encode("$client_id:$client_pass")),
'content' => "some_content"
)
);
//Do request
$context = stream_context_create($opts);
$json = file_get_contents($url, false, $context);
$result = json_decode($json, true);
if(json_last_error() != JSON_ERROR_NONE){
return null;
}
print_r($result);
Il existe plusieurs cadres REST. Je recommanderais fortement de regarder dans Slim mini Framework pour PHP
Voici une liste d'autres.