Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Wordpress » [BasicAuth] Basic Authentication with curl – WordPress HTTP API

[BasicAuth] Basic Authentication with curl – WordPress HTTP API

Thứ Ba, 15/07/2014 by Hoàng Quách

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

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

  • wp_remote_get
  • wp_remote_post
  • wp_remote_request

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

Hãy cho mình biết suy nghĩ của bạn trong phần bình luận bên dưới bài viết này. Hãy theo dõi kênh chia sẻ kiến thức WordPress của Hoangweb trên Twitter và Facebook

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: Wordpress Tìm kiếm: BasicAuth

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.