Hướng dẫn dùng curl -x trong PHP

Danh sách các bài viết trong chuyên mục PHP CURL, đây là những bài viết mới nhất được cập nhật trong mục PHP CURL.

CURL là một khái niệm khá mới mẻ từ trước năm 2014, nhưng hiện nay nó là một từ khóa khá là HOT bởi vì các website hiện nay có sử dụng CURL để xây dựng.

CURL dùng để gửi request đến một đường dẫn trên Internet nào đó và bạn có thể tùy chỉnh các thông tin như User Egent để phía đường link kia không chặn requets. Ví dụ bạn muốn đăng nhập vào hệ thống upload file của upfile.vn bằng tài khoản của bạn và sử dụng chức năng upload file. Điều này quá bình thường nhưng vấn đề ở đây là mình muốn giao diện upload phải ở trên website của mình, điều này bắt buộc bạn phải sử dụng CURL để giả request POST đến webiste upfile.

Để sử dụng được CURL PHP thì bạn phải bật module này trong apache. Nếu bạn đang ở local thì quá đơn giản bởi vì bạn chỉ cần vào file config để chỉnh là được. Nhưng nếu bạn sử dụng host thì phải liên hệ trực tiếp nhà cung cấp để họ bật cho bạn nhé. Tuy nhiên trường hợp này cũng ít xảy ra bởi vì đa số họ đã bật sẵn cho bạn rồi.

Như vậy trong series này chúng ta sẽ cùng nhau học CURL trong PHP nhé các bạn. 

+PHP CURL
1 Bài 08: Sử dụng CURL PHP để đăng nhập vào website khác
2 Bài 01: Viết chương trình PHP CURL đầu tiên
3 Bài 02: Tìm hiểu hàm curl_setopt (CURL PHP)
4 Bài 03: Lấy hình từ site khác bằng PHP CURL
5 Bài 04: PHP CURL POST - GET - Sử dụng CURL để submit form
6 Bài 05: Sử dụng PHP CURL để upload file
7 Bài 06: Upload image lên Picasa sử dụng CURL trong PHP
8 Bài 07: Sử dụng PHP CURL tạo album Picasa và trả về ID album

Bài trước chúng ta đã làm một ví dụ đơn giản sử dụng CURL để viết một ứng dụng đó là chạ một trang web khác, trong bài đó chúng ta có sử dụng hàm curl_setopt để thiết lập các thông số cấu hình cho CURL. Vậy thì trong bài này chúng ta sẽ tìm hiểu hàm này và các thông số truyền vào của nó nhé.

Hướng dẫn dùng curl -x trong PHP

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Hàm curl_setopt trong CURL PHP

Cú phápbool curl_setopt ( resource $ch , int $option , mixed $value )

Trong đó:

  • $ch là object curl khi sử dụng hàm curl_init
  • $option là tên của thông số
  • $value là giá trị của thông số

Ví dụ

Bài viết này được đăng tại [free tuts .net]

// Tạo mới một CURL
$ch = curl_init();

// Cấu hình cho CURL
curl_setopt($ch, CURLOPT_URL, "https://freetuts.net/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// Thực thi CURL
curl_exec($ch);

// Ngắt CURL, giải phóng
$result = curl_close($ch);

// In kết quả ra màn hình
echo $result;

Trong ví dụ này mình có sử dụng hàm curl_setopt để cấu hình hai thông số đó là:

  • CURLOPT_URL: đường dẫn tới URL cần xử lý
  • CURLOPT_RETURNTRANSFER: nếu true thì sẽ trả kết quả về ở hàm curl_exec nên ta phải echo kết quả đó mới in lên trình duyệt, nếu false thì thực thi là nó in kết quả lên trình duyệt luôn

Trong ví dụ ở bài 1 mình không sử dụng thông số CURLOPT_RETURNTRANSFER nên không cần echo $result, còn ở đây vì có sử dụng nên phải echo.

2. Danh sách các thông số cấu hình của hàm curl_setopt PHP

Thật sự mà nói mình không thể liệt kê hết các thông số cấu hình cho hàm này được vì nó có quá nhiều, và thực tế thì mình cũng chưa bao giờ sử dụng hết các thông số đó nên cũng không dám liệt kê ra. Nếu bạn quan tâm thì hãy lên trang chủ của php.net bằng link này để xem thêm nhé.

Tuy nhiên ở các bài tiếp theo chúng ta sẽ làm các ví dụ và sẽ biết thêm được một số thông số cấu hình cho hàm curl_setopt nên các bạn yên tâm nhé. Cứ chờ đợi.

3. Lời kết

Bài 2 này cũng sẽ ngưng tại đây, lý do mình đã nói rồi vì các thông số quá nhiều  nên không thể  trình bày hết ra đây được. Chúng ta sẽ thực hành các ví dụ ở các bài tiếp theo và tôi sẽ ứng dụng một số thông số đặc trưng, hay sử dụng để các bạn làm quen, từ đó có thể mày mò thêm nhé.

CURL là thuật ngữ thường xuyên được nhắc hiện nay. Vậy CURL là gì và sử dụng như thế nào?
Trong bài này mình sẽ giải thích và ví dụ cho các bạn dễ hiểu hơn.
cURL là một hàm của PHP, giúp ta lấy,gửi chiết tách hay đọc nội dung một trang web khác ngay trên Server của chúng ta. Một thuận lợi lớn nhất mà hàm curl này mang lại đó là tốc độ, nhanh hơn rất nhiều so với hàm open file  gần gấp 3 lần. cURL được ví như một công cụ giao tiếp đa giao thức, giúp ta xem hoặc tải một địa chỉ Trước khi lướt qua các bài ví dụ, chúng ta nên xem lại cách tạo, gọi và thực thi một hàm curl nhé.
Một thủ tục cUrl hoàn chỉnh phải trải qua các bước sau:


$ch = curl_init(); //khai báo curl
curl_setopt($ch, CURLOPT_URL,"http://congnghe5s.com"); // xác định địa chỉ cần thực thi
curl_setopt($ch, CURLOPT_POST, 1); // GET hay POST
// và các tham số khác ... dùng curl_setopt để dịnh giá trị cho mỗi tham số.
curl_exec ($ch); // thực thi curl
curl_close ($ch); // đóng curl để giải phóng vùng nhớ
?>

Bạn có thể thiết đặt thêm 1 hoặc nhiều option nữa cho curl bằng curl_setopt. Các curl_setopt này phải được đặt trước curl_exec thì mới có hiệu lực.

Trong mỗi ví dụ mình đều có comment, chắc là không cần phải giải thích thêm.

Đọc dữ liệu từ một url dưới dạng binary và lưu vào biến


// Vẫn như thường lệ, phải khai báo cái đã
$ch = curl_init("http://congnghe5s.com/public/images/logo-5s.png);
// khai báo curl có kèm url

// tức đã set luôn CURLOPT_URL cho curl
if (! $ch) {
 die( "Lỗi trong quá trình khởi tạo cURL" );
}

// Chúng ta sẽ nhận trị trả về và nhận dưới dạng binary
// Dó đó ta phải set 2 option như sau

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
// Nếu không set như trên, bạn sẽ không nhận được gì
// khi curl được thực thi, tức giá trị NULL
// Chạy curl và lưu trị trả về vào $data
$data = curl_exec($ch);
// đóng kết nối
curl_close($ch);

// Lúc bây giờ $data đã lưu file ảnh vừa lây được từ
// url khai báo ban đầu
header("Content-type: image/jpeg");
// Định dạng ảnh là .jpg, do đó content-type như trên
// cũng không có gì quá khó hiểu
// xuất dữ liệu ra và trả về cho người duyệt web
print( $data );

?>

Trong ví dụ trên, chúng ta dùng curl để load một file ảnh từ địa chỉ và lưu nó vào biến $data. Cuối cùng ta xuất biến $data này ra, tức xuất file ảnh ra…  Nói nôm na, ta tải file ảnh về và xuất nó ra cho người dùng coi.


Upload file gián tiếp lên trang web khác

Giả sử ta có form sau:


<form enctype="multipart/form-data" action="somewhere.php" method="post">
    <input type="file" name="upfile">
    <input type="text" name="filename">
    <input type="text" name="description">
    <input type="submit" value="upload">
</form>
?>

Vâng đây là một form dùng để upload file. Chúng ta có thể dùng curl để upload gián tiếp một file trên host của ta (máy chủ đang thực thi lệnh curl) lên máy chủ đích. Trước khi thực hiện ví dụ, ta cần chú trọng một số vấn đề trước khi làm thử thủ thuật này.


giá trị name của thẻ input: “name=”
Loại tệp tin của file sẽ dùng để upload phải phù hợp với loại tệp tin mà máy chủ đích yêu cầu, nếu không muốn bị máy chủ đích từ chói.
Địa chỉ tuyệt đối đến nơi sẽ nhận dữ liệu từ form có thể suy ra từ chỗ “action=”



// địa chỉ đến file cần upload
   $uploadfile="/tmp/myimage.jpg";


// và khai báo curl
// địa chỉ ở đây bạn phải suy ra từ  thuộc tính
// action của form, congnghe5s.com chỉ là ví dụ
   $ch = curl_init("http://congnghe5s.com/somewhere.php");


// Đặt thuộc tính
// trước hết là các biến cho gói dữ liệu POST
   curl_setopt($ch, CURLOPT_POSTFIELDS,
               array('sampfile'=>"@$uploadfile",
                     'shoesize'=>'9',
                     'filename'=>"fake name for file"));

// cài chế độ lấy nội dung trả về
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);


// thực thi curl, đồng thời lưu trị trả về vào biến
   $postResult = curl_exec($ch);

//đóng kết nối và xuất ra nội dung trang web trả về.
   curl_close($ch);
   print "$postResult";


?>

Sử dụng Cookie Jar, lưu trữ cookie

curl có một tính năng độc đáo là lưu trữ lại cookie trong quá trình thực thi lại thành một tệp tinh lưu trên host hiện hành. File cookie có thể dùng để nạp vào curl cho lần truy vấn sau, rất thuận tiện nếu trang web đích yêu cầu đăng nhập, hoặc làm một số hành động kiểm tra cookie.

Thủ thuật này gồm 2 ví dụ. Ví dụ 1, lưu cookie với cookie jar:

Đoạn code trên sẽ truy cập vào congnghe5s.com với username là admin và 123456 là mật khẩu (giả sử). Sau đó nó sẽ lưu toàn bộ cookie minhnhut.info thiết lập vào file cookieFileName. Mọi chuyện diễn ra khá đơn giản.


Tiếp theo là ví dụ 2, ta sẽ sử dụng lại file cookie từ ví dụ 1.



$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

// dùng lại file cookie đã lưu
curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookieFileName");

// giả sử dashboard.php là trang mật, chỉ khi đã đăng nhập mới có
// quyền truy cập
curl_setopt($ch, CURLOPT_URL,"http://congnghe5s.com/dashboard.php");

//thực thi
$data = curl_exec($ch);

// đóng
curl_close ($ch);

// xuất ra nội dung dashboard.php đã truy cập
echo htmlentities($data);

?>

Ở ví dụ 2 trên ta giả sử dashboard.php được bảo vệ bằng mật khẩu, ở ví dụ 1 ta đã đăng nhập và lưu lại cookie, ở ví dụ 2 ta dùng lại cookie cũ tức đã được xác nhận là đã đăng nhập, dó đó curl sẽ có thể truy cập được nội dung dashboard.php trên congnghe5s.com