Nasıl PHP curl ile HTTP temel kimlik doğrulaması kullanarak bir istek yapabilirim?

4 Cevap php

Ben PHP REST web hizmeti istemcisi inşa ediyorum ve şu anda ben servise isteklerini yapmak için curl kullanıyorum.

Nasıl doğrulanmış (http temel) isteklerini yapmak için kıvırmak kullanabilirim? Ben başlıklarını kendim eklemek zorunda mı?

Eğer öyleyse diğer bazı sorular var -

  1. Php için REST kütüphane var mı?

  2. or is there a wrapper for curl that makes it a bit more rest friendly?

  3. or am I going to have to continue to roll my own?

Teşekkürler.

4 Cevap

Bunu istiyorum:

curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);  

Zend has a REST client and zend_http_client and I'm sure PEAR has some sort of wrapper. But its easy enough to do on your own.

Yani tüm istek şöyle görünebilir:

$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);

SOAP aksine, DİNLENME bu yüzden bir "REST İstemcisi" olması biraz zor bir standart bir protokol değildir. En sığınakta hizmetleri kendi temel protokol olarak HTTP kullanır beri Ancak, herhangi bir HTTP kütüphane kullanımı gerekir. CURL ek olarak, PHP PEAR ile bu vardır:

HTTP_Request2

hangi değiştirilmesi

HTTP_Request

Bunlar HTTP Temel Yetkilendirme yapmak nasıl bir örnek

// This will set credentials for basic auth
$request = new HTTP_Request2('http://user:password@www.example.com/secret/');

Ayrıca Digest auth destek

// This will set credentials for Digest auth
$request->setAuth('user', 'password', HTTP_Request2::AUTH_DIGEST);

CURLOPT_USERPWD temelde aşağıdaki gibi http başlığı ile user:password dize base64 gönderir:

Authorization: Basic dXNlcjpwYXNzd29yZA==

Yani dışında gelen CURLOPT_USERPWD aynı zamanda da aşağıdaki diğer başlıklarıyla gibi HTTP-Request başlık seçeneği kullanabilirsiniz:

$headers = array(
    'Content-Type:application/json',
    'Authorization: Basic '. base64_encode("user:password") // <---
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);