[BasicAuth] Basic Authentication with curl – WordPress HTTP API

Quảng cáo
Ads_ngang
Website dinhthuanit.com có bài [BasicAuth] Basic Authentication with curl – WordPress HTTP API

Basic Authentication (viết tắt là: BasicAuth) không là điểm hay của WordPress API, nó cung cấp một số hàm để làm việc với trang web wordpress khác tới từ domain khác. WordPress.org không bổ trợ Oauth, bạn cần cung cấp tin tức 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'     =&  gt  ;     array    (     'Authorization'     =&  gt  ;     'Basic '     .     base64_encode    (   YOUR_USERNAME   .     ':'     .   YOUR_PASSWORD   )     )    ,     'timeout'    =&  gt  ;    60    ,     'sslverify'     =&  gt  ;     false    ,     'method'     =&  gt  ;     '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ũng đều 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 hiện hữu trong wordpress được dùng trong số internal page. Nếu bạn request đến 1 internal page (same domain) thì mình đề xuất bạn dùng wp_remote_request. Một tỉ dụ cho bạn dễ hiểu, sử dụng request curl để lấy thông tin người sử 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 tin tức 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ả thu đượ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òn cũng đều có thể sẽ hoạt động. Sau vài giờ kiếm tìm mình cũng chưa tìm thấy câu trả nào chuẩn 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  ,     "  :  "        )    ;      </ 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    (     '  '       .     ':'     .     '  '       )    ,     )    )    ;      </ 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    )    ;   

Để thu được bài viết mới vui lòng đăng ký kênh kiến thức WordPress từ A-Z ở Form bên dưới. Bạn cũng cũng đều có thể nhận được sự trợ giúp trên Twitter và Facebook

Bài viết [BasicAuth] Basic Authentication with curl – WordPress HTTP API được tổng hợp và biên tập bởi: dinhthuanit.com. Mọi ý kiến đóng góp và phản hồi vui lòng gửi Liên Hệ cho dinhthuanit.com để điều chỉnh. dinhthuanit.com xin cảm ơn.

Bài Viết Liên Quan


Bài Viết Khác


Quảng cáo
Ads_ngang