Home WordpressWordPress cơ bản [BasicAuth] Basic Authentication with curl – WordPress HTTP API

[BasicAuth] Basic Authentication with curl – WordPress HTTP API

by admincp

Basic Authentication (viết tắt là: BasicAuth) không là điểm mạnh của WordPress API, nó cung cấp một số hàm để làm việc với trang web wordpress khác đến từ domain khác. WordPress.org không hỗ trợ Oauth, bạn phải cung cấp thông tin username và password.

Các hàm làm việc với BasicAuth

Nạp nội dung từ website khác trong php có curl, đối với wordpress chúng ta có hàm wp_remote_get/wp_remote_request.

//Here’s how:
$url="http://localhost/wordpress";
$args = array(
	'headers' => array(
		'Authorization' => 'Basic ' . base64_encode( YOUR_USERNAME . ':' . YOUR_PASSWORD )
	),
	'timeout'=>60,
	'sslverify' => false,
	'method' => 'GET'
);
 
$res=wp_remote_request( $url, $args );	//alternate by using curl in php, must be include cookie hack into url, but this is enough
if( is_wp_error( $res ) ) {
	echo 'ERROR';
}
else {
	//...
}

Kết quả trả về:

//Retrieve the raw response from the HTTP request.
$res => array(
    'headers'  => array(),
 
    'response' => array(
        'code'    => int,
        'message' => string
    )
);

Hàm wp_remote_request thực hiện cả 2 phương thức GET và POST. Bạn cũng có thể sử dụng phương thức GET với hàm wp_remote_get và phương thức POST với hàm wp_remote_post.

Thông tin headers chứa trong mảng gồm key=tên và value=giá trị. Ví dụ lấy thông tin User-Agent trả về từ HTTP sẽ là:

$user_agent = $res['headers']['user-agent'];

Lấy toàn bộ nội dung của HTTP (dạng raw).

echo $res['body'];
//cách khác sử dụng wp_remote_retrieve_body
wp_remote_retrieve_body(wp_remote_get('http://www.wordpress.org'));

Tại sao không nên sử dụng CURL PHP

– Sử dụng CURL php là độc lập với môi trường wordpress, một số cookie tồn tại trong wordpress được sử dụng trong các internal page. Nếu bạn request đến 1 internal page (same domain) thì mình đề nghị bạn dùng wp_remote_request. Một ví dụ cho bạn dễ hiểu, sử dụng request curl để lấy thông tin người dùng hiện tại. Giả sử chúng ta có page: ‘user’ có địa chỉ:

http://localhost/wordpress/user

– Page này print thông tin người dùng, chứa đoạn mã sau:

< ?php
$user=wp_get_current_user();
print_r($user);
?>

Sử dùng CURL PHP có dạng như sau:

$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://localhost/wordpress/user');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
echo curl_exec($ch);
$information = curl_getinfo($ch);
print_r($information);

Kết quả nhận được là một mảng rỗng, không có dữ liệu. Tại sao lại như vậy? curl php có thuộc tính cookie truyền cookie của wordpress vào tham số này có thể sẽ hoạt động. Sau một vài giờ tìm kiếm mình cũng chưa tìm thấy câu trả nào chính xác cho vấn đề này, ngoại trừ sử dụng các hàm remote URL của wordpress ở trên.

Thử một vài cách nhưng thất bại 🙁

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "<username>:<password>");
</password></username>
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");		#writing
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");		#reading
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Basic ' . base64_encode( '<username>' . ':' . '<password>' ),
    ));
</password></username>

POST Request

Đoạn code sau sử lý dữ liệu POST, truyền thông tin Authorization vào header để có phiên làm việc của user.

$body=array('a'=>'A','b'=>'B');
$args = array(
	'headers' => array(
		'Authorization' => 'Basic ' . base64_encode( YOUR_USERNAME . ':' . YOUR_PASSWORD ),
		'Content-Length' => strlen( json_encode($body) )
	),
	'method' => 'POST',
	'body'=>json_encode($body)
);
wp_remote_request($url,$args);

Nếu bạn thấy bài viết này hữu ích, hãy chia sẻ với bạn bè bằng cách nhấn nút chia sẻ ở bên dưới. Theo dõi chúng tôi trên TwitterFacebook

Liên hệ

Công ty chuyên Thiết kế website uy tín nhất Miền Bắc: http://vinastar.net

Hotline tư vấn: 0989 48 3456

Nguồn: Sưu tầm trên internet

You may also like

Leave a Comment