Jawaban:
Kamu mau ini:
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
Zend memiliki klien REST dan zend_http_client dan saya yakin PEAR memiliki semacam bungkus. Tapi itu cukup mudah untuk dilakukan sendiri.
Jadi seluruh permintaan mungkin terlihat seperti ini:
$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
pada dasarnya mengirim base64 dari user:password
string dengan http header seperti di bawah ini:
Authorization: Basic dXNlcjpwYXNzd29yZA==
Jadi selain CURLOPT_USERPWD
Anda juga dapat menggunakan HTTP-Request
opsi tajuk seperti di bawah ini dengan tajuk lainnya:
$headers = array(
'Content-Type:application/json',
'Authorization: Basic '. base64_encode("user:password") // <---
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
CURLOPT_USERPWD
bekerja untuk saya.
Cara paling sederhana dan asli untuk menggunakan CURL secara langsung.
Ini bekerja untuk saya:
<?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);
Tidak seperti SOAP, REST bukan protokol standar sehingga agak sulit untuk memiliki "REST Client". Namun, karena sebagian besar layanan RESTful menggunakan HTTP sebagai protokol yang mendasarinya, Anda harus dapat menggunakan perpustakaan HTTP apa pun. Selain cURL, PHP juga menyediakannya melalui PEAR:
yang diganti
Contoh bagaimana mereka melakukan HTTP Basic Auth
// This will set credentials for basic auth
$request = new HTTP_Request2('http://user:password@www.example.com/secret/');
Juga mendukung Digest Auth
// This will set credentials for Digest auth
$request->setAuth('user', 'password', HTTP_Request2::AUTH_DIGEST);
Jika jenis otorisasi adalah autentik Dasar dan data yang diposting json maka lakukan seperti ini
<?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 memiliki tutorial tentang membuat panggilan ke layanan REST mereka menggunakan PHP:
Membuat Yahoo! Panggilan Layanan REST Web dengan PHP
Saya belum menggunakannya sendiri, tetapi Yahoo adalah Yahoo dan harus menjamin setidaknya beberapa tingkat kualitas. Mereka tampaknya tidak mencakup permintaan PUT dan DELETE.
Juga, Catatan Kontribusi Pengguna untuk curl_exec () dan lainnya mengandung banyak informasi yang baik.
Anda hanya perlu menentukan opsi CURLOPT_HTTPAUTH dan 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);
Atau sebutkan tajuk:
$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);
Contoh guzzle:
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());
Lihat https://github.com/andriichuk/php-curl-cookbook#basic-auth
Michael Dowling sangat aktif dipertahankan membuang waktu adalah cara yang baik untuk pergi. Terlepas dari antarmuka yang elegan, panggilan asinkron dan kepatuhan PSR, itu membuat header otentikasi untuk panggilan REST menjadi sangat mudah:
// 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']]);
Lihat dokumen .
Bagi yang tidak ingin menggunakan ikal:
//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);
Ada beberapa kerangka kerja REST di luar sana. Saya akan sangat menyarankan melihat ke dalam Slim mini Framework for PHP.
Berikut adalah daftar yang lain.