1. 程式人生 > >PHP抓包之curl、file_get_contents 操作例項

PHP抓包之curl、file_get_contents 操作例項

1.概述

  1. file_get_contents函式多用來於來採集遠端伺服器上的內容,但使用file_get_contents函式之前我們在php.ini中是必須把allow_url_fopen開啟才行
  2.  cURL 是一個利用URL語法規定來傳輸檔案和資料的工具,支援很多協議,如HTTP、FTP、TELNET等。

2、file_get_contents 和 curl 區別

1.curl 支援更多功能

curl 支援更多協議,有http、https、ftp、gopher、telnet、dict、file、ldap;模擬 Cookie 登入,爬取網頁;FTP 上傳下載。
fopen / file_get_contents 只能僅支援http協議獲取資料。

2.效能

curl 可以進行 DNS 快取,同一個域名下的圖片或其它資源只需要進行一次DNS查詢。
curl 相對來說更加快速穩定,訪問量高的時候首選 curl,缺點就是相對於 file_get_contents 配置繁瑣一點,file_get_contents 適用與處理小訪問的應用。

CURL 訪問方式

1.語法

curl_init;           //初始化 cURL 會話。
curl_setopt;     //設定 cURL 傳輸選項。
//curl_setopt 設定 CURLOPT_RETURNTRANSFER 為 TRUE 時將 curl_exec() 獲取的資訊以字串返回。
curl_exec; //返回 true / false, curl_close; //關閉 cURL 會話。

2.get請求

//1.初始化Curl
$curl = curl_init();
//設定curl傳輸選項
curl_setopt($curl, CURLOPT_URL, 'www.baidu.com');//訪問ip地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//設定為FALSE 禁止 cURL 驗證對等證書
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//設定為1或true時,獲取的資訊以字串返回
$data = curl_exec($curl); //返回值 curl_close($curl); return $data;

3.post請求

$post_data = ['username' => '123456','password' => '******'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'www.baidu.com/login');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, 1);//設定為1或true時,是post請求,
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);//post請求引數
$output = curl_exec($ch);
curl_close($ch);
$out = json_decode($output);
return $out;

file_get_contents訪問方式

1.語法:

file_get_contents(path, include_path, context, start, max_length)

path:要讀取的路徑或連結。
include_path:是否在路徑中搜索檔案,搜尋則設為 1,預設為 false。
context:修改流的行為,如超時時間,GET / POST 等。
start:開始讀檔案的位置。
max_length:讀取檔案的位元組數。

2.get請求

$ret = file_get_contents("http://www.baidu.com");

3.post請求

$url = 'www.baidu.com/login';
$data = ['username' => '123456','password' => '******'];
$data = json_encode($data);
$opts = [
                 'http' => [
                                    'method' => 'POST',
                                    'header'  => 'Content-type:application/json',
                                    'content' => $data,
                           ]
        ];
//stream_context_create()函式:建立並返回一個文字資料流並應用各種選項,
//可用於fopen(),file_get_contents()等過程的超時設定、代理伺服器、請求方式、頭資訊設定的特殊過程
$context = stream_context_create($opts);
$ret = file_get_contents($url,false,$context);

總結

file_get_contents處理頻繁小的時候,如果你的檔案被1k+人處理。那麼會佔用您的伺服器大量cpu。
curl 相對來說更加快速穩定,訪問量高的時候首選 curl,
根據本人習慣,更喜歡curl,因為他是PHP專業的抓包工具,能夠更好的支援資料協議,

本片部落格簡單的介紹一下curl、file_get_contents的介紹、使用、區別,為小夥伴更好的學習和工作中使用,能幫助小夥伴在工作中減少犯難是我的幸福,祝每一個程式設計師不再有bug,感覺對你有幫助的小夥伴請多多支援