- shares
- 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
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 Messenger
- Gmail
- Viber
- Skype