phpuseragent
① php 如何區分 useragent是不是偽造的
PHP通過內置全局變數$_SERVER['HTTP_USER_AGENT']來獲取用戶信息,包括瀏覽器信息,操作系統等;判斷是否是手機還是電腦終端訪問,只需判斷他的$_SERVER['HTTP_USER_AGENT']信息是否存在手機終端類型即可。示例如下:
② 在php中如何模擬HTTP_USER_AGENT,一個網站需要驗證這個,請問下怎麼模擬
<?php
//client
$ch=curl_init();
curl_setopt_array($ch,
array(
CURLOPT_URL=>'http://localhost/ua.php',
CURLOPT_USERAGENT=>"YeRenChai_v1.0",
CURLOPT_RETURNTRANSFER=>True,
CURLOPT_FOLLOWLOCATION=>True,
)
);
$response=curl_exec($ch);
if(!$response)exit(curl_error($ch));
var_mp($response);
?>
③ PHP判斷普通用戶或蜘蛛,調用不同代碼
定義一個函數 get_naps_bot()
如果是 BOT 則返回字元串, 如果不是 BOT 返回 false
function get_naps_bot()
{
$useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
if (strpos($useragent, 'googlebot') !== false){
return 'Googlebot';
}
if (strpos($useragent, 'msnbot') !== false){
return 'MSNbot';
}
if (strpos($useragent, 'slurp') !== false){
return 'Yahoobot';
}
if (strpos($useragent, 'spider') !== false){
return 'Baispider';
}
if (strpos($useragent, 'sohu-search') !== false){
return 'Sohubot';
}
if (strpos($useragent, 'lycos') !== false){
return 'Lycos';
}
if (strpos($useragent, 'robozilla') !== false){
return 'Robozilla';
}
return false;
}
$botName = get_naps_bot();
if( empty($botName ) )
{
include( "11.php" );// 用戶訪問
}
else
{
include( "22.php" ); // 蜘蛛訪問
}
④ php 怎麼獲取內網IP
ip地址分 IPv4和IPV6兩個版本。
127.0.0.1或者192.168.0.1之類的,屬於IPV4的格式
127.0.0.1轉換為IPv6就是 ::1
IPv6具體的格式寫法,你搜索一下了解一下。
另外 ,服務端獲取ip地址,是相對的。比如你在區域網內建一個伺服器,在程序里獲取的ip地址,就是客戶端在區域網的ip ,一般是類似 192.168.0.101 之類的,大公司的話可能 10.x.x.x
區域網的ip地址,可以直接在網路適配器上看到
而在inter網,也就是大網路上,服務端獲取的ip地址,是你的連網設備獲取到的公網ip ,一般一個區域網內的主機,相對於網際網路上的伺服器,顯示的都是公網地址。
公網ip沒有在本機電腦上直接顯示。會顯示在路由或者連網設備上。也可以通過網路搜索 ip地址,會顯示你的公網ip
所以,假設一個區域網內,有兩台電腦同時訪問一個網上的伺服器,伺服器是沒辦法給兩台電腦區分開ip地址的,顯示的是一樣的。只是可能得到的設備信息不一樣(如:瀏覽器的useragent)
⑤ 在PHP中如何模擬HTTP_USER_AGENT
在curl里可以設置UA
<?php
//client
$ch=curl_init();
curl_setopt_array($ch,
array(
CURLOPT_URL=>'http://localhost/ua.php',
CURLOPT_USERAGENT=>"YeRenChai_v1.0",
CURLOPT_RETURNTRANSFER=>True,
CURLOPT_FOLLOWLOCATION=>True,
)
);
$response=curl_exec($ch);
if(!$response)exit(curl_error($ch));
var_mp($response);
?>
<?php//server
echo$_SERVER['HTTP_USER_AGENT'];
?>
⑥ 如何用php偽造瀏覽器ua
file_get_contents 和 curl 這倆強悍的函數,在遠程抓取時候相當有用處。不過一些網站會根據來訪ip是否攜帶user_agent來判斷是正常的瀏覽器客戶端還是機器。所以,我們的任務就是給他們偽造user_agent。
file_get_contents偽造user_agent 方法如下:
ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;http://www..com)');
curl偽造user_agent的方法:
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;http://www..com)');
附帶上curl的完整函數方法:
function curl_get_file_contents($URL)
{
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($c, CURLOPT_HEADER, 1);//輸出遠程伺服器的header信息
curl_setopt($c, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;http://www..com)');
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
curl_close($c);
if ($contents) {return $contents;}
else {return FALSE;}
}
這樣就可以抓取了,user_agent是可以自己修改的。
⑦ PHP如何判斷網頁是否有搜索引擎機器人在訪問瀏覽
使用PHP技術搭建,因此我們用php去判斷是否是搜索引擎,PHP有個很簡單的方式去實現,通過_SERVER這個預定義變數中的_SERVER['HTTP_USER_AGENT']可以取得訪問者的屬性,具體可以看下Diiscuz!是如何判斷搜索引擎的,函數代碼如下:
function getrobot() {
if(!defined('IS_ROBOT')) {
kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';
if(preg_match("/(kw_browsers)/", $_SERVER['HTTP_USER_AGENT'])) {
define('IS_ROBOT', FALSE);
} elseif(preg_match("/(kw_spiders)/", $_SERVER['HTTP_USER_AGENT'])) {
define('IS_ROBOT', TRUE);
} else {
define('IS_ROBOT', FALSE);
}
}
return IS_ROBOT;
}
根據上面還可以精簡如下(最終我們採用了這個方案):
if(preg_match("/(Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla)/i", $_SERVER['HTTP_USER_AGENT'])) {
echo 'robot';
}
如果你需要返回詳細的搜索引擎名稱,而不是是否是搜索引擎機器人的話,請看下面的代碼:
function get_naps_bot() {
useragent = strtolower($_SERVER['HTTP_USER_AGENT']);
if (strpos(useragent, 'googlebot') !== false){
return 'Googlebot';
}
if (strpos(useragent, 'msnbot') !== false){
return 'MSNbot';
}
if (strpos(useragent, 'slurp') !== false){
return 'Yahoobot';
}
if (strpos(useragent, 'spider') !== false){
return 'Baispider';
}
if (strpos(useragent, 'sohu-search') !== false){
return 'Sohubot';
}
if (strpos(useragent, 'lycos') !== false){
return 'Lycos';
}
if (strpos(useragent, 'robozilla') !== false){
return 'Robozilla';
}
return false;
}
⑧ php如何模擬瀏覽器行為
// 用戶名
$login = 『username』;
//密碼
$password = 『password』;
//163的用戶登陸地址
$url = 「https://reg.163.com/logins.jsp」;
//post 要提交的數據
$fields = 「verifycookie=1&style=16&proct=mail163&username=」.$login.」&password=」.$password.」&selType=jy&remUser=&secure=on&%B5%C7%C2%BC%D3%CA%CF%E4=%B5%C7%C2%BC%D3%CA%CF%E4″;
// 用來存放cookie的文件
$cookie_file = dirname(__FILE__).」/cookie.txt」;
// 啟動一個CURL會話
$ch = curl_init();
// 要訪問的地址
curl_setopt($ch, CURLOPT_URL, $url);
// 對認證證書來源的檢查,0表示阻止對證書的合法性的檢查。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// 從證書中檢查SSL加密演算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
//模擬用戶使用的瀏覽器,在HTTP請求中包含一個」user-agent」頭的字元串。
curl_setopt($ch, CURLOPT_USERAGENT, 「Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)」);
// 發送一個常規的POST請求,類型為:application/x-www-form-urlencoded,就像表單提交的一樣。
curl_setopt($ch, CURLOPT_POST, 1);
//要傳送的所有數據,如果要傳送一個文件,需要一個@開頭的文件名
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
//連接關閉以後,存放cookie信息的文件名稱
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
// 包含cookie信息的文件名稱,這個cookie文件可以是Netscape格式或者HTTP風格的header信息。
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
// 設置curl允許執行的最長秒數
//curl_setopt($ch, CURLOPT_TIMEOUT, 6);
// 獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
// 執行操作
$result = curl_exec($ch);
if ($result == NULL) {
echo 「Error:
「;
echo curl_errno($ch) . 」 – 」 . curl_error($ch) . 」
「;
}
// 關閉CURL會話
curl_close($ch);
上面這個例子相對簡單,因為用戶名和密碼可以明文傳輸,而且登陸也不需要驗證碼。qq.com的模擬登陸相對就麻煩多了,首先要突破驗證碼這關,然後由於 QQ密碼是經過javascript加密後傳輸的,登陸界面也要模擬出來,下一篇文章再繼續深入談談QQ的模擬登陸。
⑨ 如何在php中獲取curl請求的請求頭信息及相應頭信息
oCurl=curl_init();
//設置請求頭
$header[]="Content-type:application/x-www-form-urlencoded";
$user_agent="Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.36(KHTML,likeGecko)Chrome/33.0.1750.146Safari/537.36";
curl_setopt($oCurl,CURLOPT_URL,$sUrl);
curl_setopt($oCurl,CURLOPT_HTTPHEADER,$header);
//返回response_header,該選項非常重要,如果不為true,只會獲得響應的正文
curl_setopt($oCurl,CURLOPT_HEADER,true);
//是否不需要響應的正文,為了節省帶寬及時間,在只需要響應頭的情況下可以不要正文
curl_setopt($oCurl,CURLOPT_NOBODY,true);
//使用上面定義的uacurl_setopt($oCurl,CURLOPT_USERAGENT,$user_agent);curl_setopt($oCurl,CURLOPT_RETURNTRANSFER,1);
//不用POST方式請求,意思就是通過GET請求
curl_setopt($oCurl,CURLOPT_POST,false);$sContent=curl_exec($oCurl);
//獲得響應結果里的:頭大小
$headerSize=curl_getinfo($oCurl,CURLINFO_HEADER_SIZE);
//根據頭大小去獲取頭信息內容
$header=substr($sContent,0,$headerSize);
curl_close($oCurl);