Hi all member, hôm nay tớ sẽ hướng dẫn cho các mem 1 thư viện khá là hay và hữu ích đó là cURL, ngoài cURL ra còn có một số thư viện khác như GD,PDO, mPDF, .. từ từ ta tìm hiểu sau. Nhắc đến cURL thì nhiều mem sẽ nghĩ ngay đến công dụng đầu tiên là làm tool leech ., nhưng chỉ dừng ở đó thì đơn giản quá .
Ok ta sẽ tìm hiểu từ từ những cái cơ bản nhất => cái nâng cao hơn 1 chút chứ thực ra mình vẫn hiểu k hết được thằng này .cấu trúc để sử dụng cURL như sau
<?
$ch = curl_init (); #khởi tạo một phiên làm việc với curl
curl_setopt($ch,option,value); # các option(tùy chọn)
curl_exec($ch); # thực hiện phiên làm việc
Copy code
$ch = curl_init (); #khởi tạo một phiên làm việc với curl
curl_setopt($ch,option,value); # các option(tùy chọn)
curl_exec($ch); # thực hiện phiên làm việc
Copy code
ví dụ đầu tiên
<?
$ch = curl_init ();
curl_setopt($ch,CURLOPT_URL,'http://teenclub.info'); #thiết lập địa chỉ đích cho phiên làm việc
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); #thiết lập này sẽ báo cho cURL biết rằng sẽ nhận dữ liệu trả về
$html = curl_exec($ch);#thực hiên phiên làm việc và gán dữ liệu nhận được vào biến $html
echo $html;# xuất ra giá trị của biến $html
Copy code
$ch = curl_init ();
curl_setopt($ch,CURLOPT_URL,'http://teenclub.info'); #thiết lập địa chỉ đích cho phiên làm việc
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); #thiết lập này sẽ báo cho cURL biết rằng sẽ nhận dữ liệu trả về
$html = curl_exec($ch);#thực hiên phiên làm việc và gán dữ liệu nhận được vào biến $html
echo $html;# xuất ra giá trị của biến $html
Copy code
híc, nhìn có vẻ loằng ngoằng nhỉ, so với file_get_contents() thì thằng này dài dòng quá , uhm công nhận đó, nếu với việc trên với file_get_contents() chỉ cần 1 dòng là đủ
nhưng cái gì nó cũng có cái hay của nó các bạn ạ, ngắn thế kia chắc gì đã tốt mà dài thế kia chắc gì đã hay, cũng tùy cơ ứng biến thôi, nếu những ứng dụng đơn giản không yêu cầu quá phức tạp bạn hãy dùng file_get_contents() thay cURL, nhưng với những yêu cầu phức tạp hơn chắc chắn bạn phải sử dụng cURL, ví dụ đơn giản nhất là login vào 1 trang web. Ngoài ra 1 số trang sẽ chặn file_get_contents() với vài dòng code đơn giản khi đó ta phải sử dụng cURL thay thế, mình cũng có 1 demo chặn cả file_get_contents() và các cURL cơ bản ở đây http://teenclub.info/antileech/victim.php, cURL vẫn vượt được nhé chỉ là mình set thêm vài thông số để chặn các new mem thôi chứ pro vẫn vượt như thường , tản mạn đủ rồi mình đi vào vấn đề chính.
bay giờ mình sẽ phân tích qua các option cơ bản khi dùng cURL
curl_setopt($ch, CURLOPT_HTTPHEADER, 'header');# gửi header kèm theo phiên làm việc
curl_setopt($ch, CURLOPT_HEADER, 1);# nhận header trả về khi thực hiện phiên cURL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);#nhận dữ liệu trả về nếu để là 1 , không nhận để là 0
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);# nhận dữ liệu trả về dưới dạng nhị phân
curl_setopt($ch, CURLOPT_COOKIEJAR, 'file cookie');# thiết lập tên file sẽ lưu cooki vào sau mỗi phiên curl
curl_setopt($ch, CURLOPT_COOKIEFILE, 'file cookie');# thiết lập file để lấy cookie cho một phiên curl
curl_setopt($ch, cURLOPT_REFERER, 'link');#thiết lập link referer
curl_setopt($ch, CURLOPT_USERAGENT, 'useragent');#thiết lập thông tin trình duyệt
curl_setopt($ch, CURLOPT_POST,1);# thiết lập thông báo rằng sẽ gửi dữ liệu để là 1, không gửi để 0
curl_setopt($ch, CURLOPT_POSTFIELDS,'data');#thiết lập dữ liệu sẽ gửi
Copy code
curl_setopt($ch, CURLOPT_HEADER, 1);# nhận header trả về khi thực hiện phiên cURL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);#nhận dữ liệu trả về nếu để là 1 , không nhận để là 0
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);# nhận dữ liệu trả về dưới dạng nhị phân
curl_setopt($ch, CURLOPT_COOKIEJAR, 'file cookie');# thiết lập tên file sẽ lưu cooki vào sau mỗi phiên curl
curl_setopt($ch, CURLOPT_COOKIEFILE, 'file cookie');# thiết lập file để lấy cookie cho một phiên curl
curl_setopt($ch, cURLOPT_REFERER, 'link');#thiết lập link referer
curl_setopt($ch, CURLOPT_USERAGENT, 'useragent');#thiết lập thông tin trình duyệt
curl_setopt($ch, CURLOPT_POST,1);# thiết lập thông báo rằng sẽ gửi dữ liệu để là 1, không gửi để 0
curl_setopt($ch, CURLOPT_POSTFIELDS,'data');#thiết lập dữ liệu sẽ gửi
Copy code
trên đây là 1 số option hay dùng nhé, tiếp theo ta đi vào các ví dụ có mức độ nâng cao dần
Ví dụ 1: dùng cURL get nội dung 1 file
<?
$ch = curl_init('http://teenclub.info/file.zip');#khai báo thế này ta đã set luôn url cho nó khỏi cần curl_setopt($ch,CURLOPT_URL,'link');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);#nhận dữ liệu trả về nếu để là 1
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);# nhận dữ liệu trả về dưới dạng nhị phân
$data = curl_exec($ch);
$f = fopen('newfile.zip',"wb"); // mở 1 file tên là newfile.zip với quyền "wb"
fwrite($f,$data);//ghi nội dung biến $data vào file
fclose($f);// đóng file
Copy code
$ch = curl_init('http://teenclub.info/file.zip');#khai báo thế này ta đã set luôn url cho nó khỏi cần curl_setopt($ch,CURLOPT_URL,'link');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);#nhận dữ liệu trả về nếu để là 1
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);# nhận dữ liệu trả về dưới dạng nhị phân
$data = curl_exec($ch);
$f = fopen('newfile.zip',"wb"); // mở 1 file tên là newfile.zip với quyền "wb"
fwrite($f,$data);//ghi nội dung biến $data vào file
fclose($f);// đóng file
Copy code
cũng với code trên thì với 1 dòng đơn giản ta vẫn được kết quả như ý
vậy tại sao ta vẫn dùng cURL bởi vì nếu cái sever kia có 1 cơ chế bỏ vệ file nào đó thì copy() sẽ bó tay bắt buộc ta phải dùng cURL để giải quyết, tuy nhiên cái ấy mình sẽ có 1 bài khác chứ giờ nói k hết được
ví dụ 2: login vào 1 trang web
để đơn giản mình đã làm 1 trang để các bạn test, link: http://teenclub.info/log.php với user/pass = princenuce/123456
khi viewsource mã nguồn của nó mình có được form html của nó như sau
<form method="post">
username:<br><input name="username"><br>
password:<br><input name="password"><br>
<input type="submit"></form>
Copy code
username:<br><input name="username"><br>
password:<br><input name="password"><br>
<input type="submit"></form>
Copy code
bạn hãy để ý dòng name="tên trường", đó chính là 2 thông số sẽ được gửi đi khi ta nhấn submit, 2 cái ấy là username và password đó ạ
<?
$ch = curl_init("http://teenclub.info/log.php");
curl_setopt($ch, CURLOPT_POST,1);#thiết lập gửi dữ liệu
curl_setopt($ch, CURLOPT_POSTFIELDS,array('username'=>'princenuce', 'password'=>'123456'));#thiết lập dữ liệu gửi
curl_exec($ch);
curl_close($ch);
Copy code
$ch = curl_init("http://teenclub.info/log.php");
curl_setopt($ch, CURLOPT_POST,1);#thiết lập gửi dữ liệu
curl_setopt($ch, CURLOPT_POSTFIELDS,array('username'=>'princenuce', 'password'=>'123456'));#thiết lập dữ liệu gửi
curl_exec($ch);
curl_close($ch);
Copy code
chạy thử coi nào.
thôi mỏi tay quá rồi hôm sau nói tiếp
Nguồn: daivietpda.vn
Tags:
Johncms