Câu trả lời:
Bạn muốn điều này:
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
Zend có ứng dụng khách REST và zend_http_client và tôi chắc chắn PEAR có một số loại trình bao bọc. Nhưng nó đủ dễ để tự làm.
Vì vậy, toàn bộ yêu cầu có thể trông giống như thế này:
$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
về cơ bản gửi cơ sở64 của user:password
chuỗi với tiêu đề http như dưới đây:
Authorization: Basic dXNlcjpwYXNzd29yZA==
Vì vậy, ngoài việc CURLOPT_USERPWD
bạn cũng có thể sử dụng HTTP-Request
tùy chọn tiêu đề cũng như bên dưới với các tiêu đề khác:
$headers = array(
'Content-Type:application/json',
'Authorization: Basic '. base64_encode("user:password") // <---
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
CURLOPT_USERPWD
làm việc cho tôi.
Cách đơn giản và tự nhiên nhất là sử dụng trực tiếp CURL.
Điều này làm việc cho tôi:
<?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);
Không giống như SOAP, REST không phải là một giao thức được tiêu chuẩn hóa nên hơi khó để có một "Máy khách REST". Tuy nhiên, vì hầu hết các dịch vụ RESTful sử dụng HTTP làm giao thức cơ bản của chúng, bạn sẽ có thể sử dụng bất kỳ thư viện HTTP nào. Ngoài cURL, PHP có những thứ này thông qua PEAR:
mà thay thế
Một ví dụ về cách họ thực hiện HTTP Basic Auth
// This will set credentials for basic auth
$request = new HTTP_Request2('http://user:password@www.example.com/secret/');
Cũng hỗ trợ Digest Auth
// This will set credentials for Digest auth
$request->setAuth('user', 'password', HTTP_Request2::AUTH_DIGEST);
Nếu loại ủy quyền là Cơ sở xác thực và dữ liệu được đăng là json thì hãy làm như thế này
<?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 có một hướng dẫn về cách thực hiện các cuộc gọi đến các dịch vụ REST của họ bằng PHP:
Làm cho Yahoo! Dịch vụ web REST Gọi với PHP
Tôi đã không sử dụng nó cho mình, nhưng Yahoo là Yahoo và phải đảm bảo ít nhất một số mức chất lượng. Mặc dù vậy, chúng dường như không bao gồm các yêu cầu PUT và DELETE.
Ngoài ra, Ghi chú đóng góp của người dùng cho curl_exec () và những người khác chứa nhiều thông tin tốt.
Bạn chỉ cần xác định các tùy chọn CURLOPT_HTTPAUTH và 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);
Hoặc chỉ định tiêu đề:
$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);
Ví dụ hướng dẫn:
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());
Xem https://github.com/andriichuk/php-curl-cookbook#basic-auth
Gu Gu duy trì rất tích cực của Michael Dowling là một cách tốt để đi. Ngoài giao diện thanh lịch, gọi không đồng bộ và tuân thủ PSR, nó làm cho các tiêu đề xác thực cho các cuộc gọi REST trở nên đơn giản:
// 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']]);
Xem tài liệu .
Đối với những người không muốn sử dụng 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);
Có nhiều khung REST ngoài kia. Tôi thực sự khuyên bạn nên xem xét Slim mini Framework cho PHP
Dưới đây là danh sách những cái khác.