- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Trong bài hôm nay mình hướng dẫn các bạn sử dụng php curl cơ bản để lấy dữ liệu của website cũng như gửi dữ liệu vào website và rất nhiều tính năng khác nữa. Thư viện curl được tích hợp sẵn trong web server, chúng ta có thể sử dụng curl với ngôn ngữ lập trình web server như php, java nhưng bản chất của nó là giao diện lệnh curl command line.
Sau khi cài PHP Webserver bạn có thể sẵn sàng làm việc với thư viện curl.
Đoạn mã sau echo nội dung của trang web:
$ch=curl_init(); curl_setopt($ch,CURLOPT_URL,"http://example.com"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); echo curl_exec($ch);
Khởi tạo đối tượng curl với curl_init
vào biến $ch
, ta hiểu là tạo instance của curl. Thiết lập các thuộc tính cho đối tượng curl chúng ta có hàm curl_setopt
. Khai báo địa chỉ URL với constant CURLOPT_URL
. Bạn có thể thiết lập URL ngay ở bước tạo đối tượng curl.
$ch=curl_init("http://example.com");
Sau khi thực thi curl bởi hàm curl_exec()
sẽ trả về nội dung của URL, nếu bạn thiết lập CURLOPT_RETURNTRANSFER=true. Mặc định giá trị này là false , toàn bộ nội dung trả về sẽ echo ra ngoài.
//nội dung của URL được trả về curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); //nội dung của URL sẽ echo. curl_setopt($ch,CURLOPT_RETURNTRANSFER,false); //mặc định.
SSL – HTTPS
Nếu URL có dạng https, thì khai báo thêm thuộc tính SSL.
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
Gửi dữ liệu CURL POST
Sử dụng curl để gửi dữ liệu post đến URL rất đơn giản, mình xin lấy ví dụ cụ thể bạn có thể hiểu ra ngay. Tạo các file sau đây:
*Tạo file php (1.php) copy đoạn code dưới đây vào file sử dụng notepad++ hoặc notepad:
<!--?php $url="http://localhost/2.php"; $post=array( 'a'=>'A', 'b'=>'B' ); $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_POST,true); curl_setopt($ch,CURLOPT_POSTFIELDS,$post); echo curl_exec($ch); ?-->
*2.php:
<!--?php print_r($_POST); ?-->
Ví dụ trên chúng ta khai báo có dữ liệu post được gửi đi, thông qua option CURLOPT_POST và đưa dữ liệu vào curl bởi option CURLOPT_POSTFIELDS.
CURLOPT_POSTFIELDS chấp nhận giá trị mảng và chuỗi tham số query. Trong php có hàm http_build_query
giúp bạn tạo chuỗi query string.
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($post));
Chú ý: Hàm http_build_query($post)
trả về chuỗi là: “a=A&b=B”
Truyền dữ liệu post dạng JSON. Điều này sẽ hữu ích khi sử dụng web service, nếu bạn sử dụng API có yêu cầu truyền dữ liệu JSON không phải post fields với kiểu mảng. Một chuỗi JSON được mã hóa từ đối tượng mảng trong php có hàm json_encode
. Mặc định content-type là text/html bạn cần đổi thành json header: application/json
Sau đây là ví dụ cụ thể sử dụng CURL với php cho phép gửi dữ liệu JSON.
$data = array("name" => "Hagrid", "age" => "36"); $data_string = json_encode($data); $ch = curl_init('http://api.local/rest/users'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)) ); $result = curl_exec($ch);
Sử dụng cookie giữa các URL cùng domain
Tại sao phải sử dụng cookie trong curl, câu hỏi này bạn có thể đoán ra bởi vì cookie/session dùng để lưu phiên lảm việc của người dùng, những dữ liệu cá nhân và những thao tác api nhạy cảm cần thông tin này mới được phép hoạt động. Mình ví dụ: sử dụng 2 api, api đầu tiên có vai trò tạo phiên làm việc người dùng, api thứ 2 sử lý dữ liệu chẳng hạn như post bài viết mới. Rõ ràng để api thứ 2 có thể hoạt động phải yêu cầu xác nhận thông tin của user hay user đã login.
Thông tin của user lưu tại cookie/session và có thể hoạt động từ trang này đến trang khác. Để thực hiện được điều này bạn khai báo đường dẫn của file cookie.
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt"); #writing curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt"); #reading
<p
Những hoạt động sinh ra cookies của URL1 sẽ quản lý bởi option CURLOPT_COOKIEJAR
và những cookies cũ tạo bởi URL1 được sử dụng cho URL2, bằng cách khai báo option CURLOPT_COOKIEFILE
URL2 sẽ hoạt động trơn chu.
File cookie.txt cũ có thể bị sử dụng trong khi truy vấn API và phiên làm việc của user cũ có thể được sử dụng trong api này. Nhưng không may trong API này bạn muốn chuyển sang user mới, curl có option CURLOPT_COOKIESESSION
giúp bạn tạo cookie.txt mới.
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
Các bài sau bạn sẽ học cách làm việc với các phương thức như PUT, DELETE,…chúc bạn học tốt.
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
Hoàng Quách says
bài viết hay
khanh says
mình có cài đặt curl nhưng khi vào cmd gõ curl thì nó báo ko có lệnh này?
Hoàng Quách says
Bạn set PATH trong window chưa?