Yanıtlar:
Bunu istiyorsun:
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
Zend bir REST istemcisi ve zend_http_client vardır ve eminim PEAR bir tür sarıcı vardır. Ama kendi başına yapmak yeterince kolay.
Yani tüm istek şöyle görünebilir:
$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
temelde user:password
aşağıdaki gibi http üstbilgisi ile dizenin base64 gönderir :
Authorization: Basic dXNlcjpwYXNzd29yZA==
Dolayısıyla CURLOPT_USERPWD
, HTTP-Request
başlık seçeneğini aşağıdaki gibi diğer başlıklarla da kullanabilirsiniz :
$headers = array(
'Content-Type:application/json',
'Authorization: Basic '. base64_encode("user:password") // <---
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
CURLOPT_USERPWD
benim için çalıştı.
CURL'u doğrudan kullanmanın en basit ve yerel yolu.
Bu benim için çalışıyor:
<?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'ın aksine, REST standartlaştırılmış bir protokol değildir, bu nedenle "REST İstemcisi" sahibi olmak biraz zordur. Ancak, çoğu RESTful hizmeti temel protokol olarak HTTP kullandığından, herhangi bir HTTP kitaplığını kullanabilmeniz gerekir. CURL'a ek olarak, PHP PEAR aracılığıyla bunlara sahiptir:
hangisinin yerini aldı
HTTP Temel Yetkilendirme yönteminin nasıl yapıldığına dair bir örnek
// This will set credentials for basic auth
$request = new HTTP_Request2('http://user:password@www.example.com/secret/');
Ayrıca Digest Auth desteği
// This will set credentials for Digest auth
$request->setAuth('user', 'password', HTTP_Request2::AUTH_DIGEST);
Yetkilendirme türü Temel kimlik doğrulamasıysa ve yayınlanan veriler json ise bunu yapın
<?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, PHP kullanarak REST hizmetlerine çağrı yapma konusunda bir eğiticiye sahiptir:
Yahoo! PHP ile Web Hizmeti REST Çağrıları
Kendim kullanmadım, ancak Yahoo Yahoo ve en azından bir miktar kalite garantisi vermeli. Ancak PUT ve DELETE isteklerini kapsamıyor gibi görünüyorlar.
Ayrıca curl_exec () ve diğer kullanıcılara Kullanıcı Katkı Notları çok sayıda iyi bilgi içerir.
Sadece CURLOPT_HTTPAUTH ve CURLOPT_USERPWD seçeneklerini belirtmeniz gerekir:
$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);
Veya başlığı belirtin:
$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);
Guzzle örneği:
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());
Bkz. Https://github.com/andriichuk/php-curl-cookbook#basic-auth
Michael Dowling'in çok aktif bir şekilde bakımı yapılan Guzzle gitmek için iyi bir yoldur. Zarif arayüzü, eşzamansız arama ve PSR uyumluluğu dışında, REST çağrıları için kimlik doğrulama başlıklarını basitleştirir:
// 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']]);
Belgelere bakın .
Curl kullanmak istemeyenler için:
//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);
Orada çok sayıda REST çerçevesi var. PHP için Slim mini Framework'e bakmanızı şiddetle tavsiye ederim
İşte başkalarının bir listesi.