查了 PHP 的參考手冊:
string file_get_contents ( string $filename [, int $flags = 0 [, resource $context [, int $offset = -1 [, int $maxlen = -1 ]]]] )
第三個參數「$context」是關鍵,參考了它的範例,多送出「User-Agent」的 Header ,模擬成人使用瀏覽器來擷取內容的試試:
$url = 'http://xxx.xxx.edu.tw/';
$opts = array(
'http'=>array(
'header'=>"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28 ( .NET CLR 3.5.30729; .NET4.0E)\r\n"
)
);
$context = stream_context_create($opts);
$html = file_get_contents($url, false, $context);
試了一下,哈!只用一個「User-Agent」就破關,防禦力太低了!
如果遇到要檢查 Referer 呢?把上面的 header 再加料,餵給 server 就是囉!
$url = 'http://xxx.xxx.edu.tw/';
$referer = 'http://xxx.xxx.edu.tw/rrrrr';
$opts = array(
'http'=>array(
'header'=>"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28 ( .NET CLR 3.5.30729; .NET4.0E)\r\n"
."Referer:".$referer."\r\n"
)
);
$context = stream_context_create($opts);
$html = file_get_contents($url, false, $context);
如果還需要其它的 HTTP Headers 就繼續加。
原來php_get_contents()還能這樣用
回覆刪除長知識了,謝謝您!