php代理訪問
<?php
//授權IP
$ips=['119.29.29.29','8.8.8.8'];
//代理IP直接退出
empty($_SERVER['HTTP_VIA'])orexit('AccessDenied');
//防止快速刷新
session_start();
$seconds='3';//時間段[秒]
$refresh='5';//刷新次數
//設置監控變數
$cur_time=time();
if(isset($_SESSION['last_time'])){
$_SESSION['refresh_times']+=1;
}else{
$_SESSION['refresh_times']=1;
$_SESSION['last_time']=$cur_time;
}
//處理監控結果
if($cur_time-$_SESSION['last_time']<$seconds){
if($_SESSION['refresh_times']>=$refresh&&!in_array($getIP,$ips)){
//跳轉至攻擊者伺服器地址
header(sprintf('Location:%s','
));
exit('AccessDenied');
}
}else{
$_SESSION['refresh_times']=0;
$_SESSION['last_time']=$cur_time;
}
functiongetIP(){
if(getenv('HTTP_CLIENT_IP')){
$ip=getenv('HTTP_CLIENT_IP');
}elseif(getenv('HTTP_X_FORWARDED_FOR')){
$ip=getenv('HTTP_X_FORWARDED_FOR');
}elseif(getenv('HTTP_X_FORWARDED')){
$ip=getenv('HTTP_X_FORWARDED');
}elseif(getenv('HTTP_FORWARDED_FOR')){
$ip=getenv('HTTP_FORWARDED_FOR');
}elseif(getenv('HTTP_FORWARDED')){
$ip=getenv('HTTP_FORWARDED');
}else{
$ip=$_SERVER['REMOTE_ADDR'];
}
return$ip;
}
㈡ PHP怎麼禁止代理訪問
要禁止代理訪問,首先你要分辨對方是否使用了代理。
一般來說可以直接通過HTTP協議頭中的REMOTE_ADDR、HTTP_VIA、HTTP_X_FORWARDED_FOR來判斷。
比如,沒有使用代理的情況下,後兩個一般是空的,第一個為真實IP;
而使用了一般的代理的話,前兩個會變成代理的IP,而第三個則是真實IP。
如果使用了一般的匿名代理的話,則三個都會變為代理的IP。
如果使用了欺騙型的匿名代理的話,前兩個還是代理的IP,而第三個會被偽造為一個隨機的IP。
如果使用了高級匿名代理的話,後兩個和沒有代理一樣,是空的,第一個則為代理IP。
以上,由於HTTP協議頭是很容易偽造的,一般很難判斷用戶是否使用了代理的,因為現在絕大多數人都是用的匿名代理,而一般要真的通過上面的方式能檢測到的,很可能是只能通過代理訪問網路的人,比如區域網之類。
不過如果你會JS的話,可以參考一下WebRTC,這個是HTML5帶的一個API,可以直接獲取到真實IP,然後發送回伺服器,再和REMOTE_ADDR比對一下,就可以准確知道是否使用了代理了(使用了代理,那WebRTC獲取到的肯定是和REMOTE_ADDR不一樣的)。但是這個辦法也僅限於使用了新版瀏覽器的用戶(必須支持WebRTC),並且沒有裝屏蔽WebRTC的插件(可以通過Chrome的插件來禁用WebRTC的,較舊的瀏覽器也可以在配置里停用WebRTC),並且,也不是完全不可以偽造,因為隨便寫個腳本放在瀏覽器里替換掉默認的WebRTC API,就可以提供一個虛假的IP(不過就目前來看還沒人這么干,大多數都是想辦法直接停用WebRTC),所以這個辦法也不是100%可靠的。
如果你可以准確判斷代理了,就簡單了,直接在代碼裡面die;掉就行了。
㈢ PHP 函數代理調用
$args是參數數組,$args[0]就是第一個參數,這里把第一個參數作為函數名。
具體例子比如說這一句:
say('sayChinese', '我是','中國人'); //這里調用了函數say
function say() {
$args = func_get_args(); // 參數數組就是('sayChinese', '我是','中國人')
call_user_func_array($args[0], $args);
// 這個$args[0]就是'sayChinese',作為函數名,後面的'我是','中國人'作為參數傳給函數'sayChinese'
}
㈣ php通過代理訪問怎麼實現
while (rs.next()) {
Bars bar = new Bars();
bar.setId(rs.getLong("id"));
bar.setName(rs.getString("name"));
bar.setType(rs.getInt("type"));
bar.setCreatorId(rs.getLong("creator_id"));
resultList.add(bar);
}
㈤ php如何用代理訪問網站 求代碼
CURL 就可以啊!你的先自己開個http代理 。或者網路找一些http代理
然後在curl裡面設置http代理就可以了。
functioncurl_string($url,$user_agent,$proxy){
$ch=curl_init();
curl_setopt($ch,CURLOPT_PROXY,$proxy);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_USERAGENT,$user_agent);
curl_setopt($ch,CURLOPT_COOKIEJAR,"c:cookie.txt");//可刪除
curl_setopt($ch,CURLOPT_HEADER,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_TIMEOUT,120);
$result=curl_exec($ch);
curl_close($ch);
return$result;
}
$content="http://www.google.com";$user_agent="Mozilla/4.0";$proxy="http://192.11.222.124:8000";
㈥ PHP虛擬空間是否可以實現自動透過指定代理伺服器被訪問者訪問
虛擬空間實現不了
你的訪問端→web→代理伺服器→返回到WEB→返回訪問端
㈦ PHP實現代理IP
「代理IP」現在有很多種的,就是軟體改IP的。
軟體上有很多IP點提供給使用者切換的
在電腦上安裝IP轉換器,
在IP軟體上選擇不同的IP點連接就可以了的。
推薦軟體。可找到類似軟體的。
全國大多數城市(數百萬IP點任意切換)
希望可以幫到你。多少電腦多可以使用的。
㈧ 有沒有辦法實現PHP代理抓取網頁內容
可以呀。
用snoopy的類,網上有snoopy.class.php,你自行網路查找。
snoopy的類可以設置$proxy_host參數,設置代理主機,$proxy_port是代理主機埠。你下載一個下來,網上的教程很多,看看應該明白。
至於調用proxy.txt,輪換ip的問題,我覺得可用代理不是很多的話,可以設置成隨機選擇代理就好了。你採集的那個網站記錄的是你代理伺服器的ip
㈨ 怎麼樣用php語言實現通過proxy代理伺服器訪問網站呢
function curl_string ($url,$timeout = 3,$proxy=1){
$ua = array('Mozilla','Opera','Microsoft Internet Explorer','ia_archiver');
$op = array('Windows','Windows XP','Linux','Windows NT','Windows 2000','OSX');
$agent = $ua[rand(0,3)].'/'.rand(1,8).'.'.rand(0,9).' ('.$op[rand(0,5)].' '.rand(1,7).'.'.rand(0,9).'; en-US;)';
Tor 地址與埠
$tor = 'http://www.aimilife.com'; //這里是你的代理伺服器
連接超時設置
$timeout = 3;
$ack = curl_init();
if($proxy)
{
curl_setopt($ack, CURLOPT_PROXY, $tor);
}
curl_setopt($ack, CURLOPT_URL, $url);
curl_setopt($ack, CURLOPT_HEADER, 0);
curl_setopt($ack, CURLOPT_USERAGENT, $agent);
curl_setopt($ack, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ack, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ack, CURLOPT_TIMEOUT, $timeout);
$result = curl_exec($ack);
curl_close($ack);
return $result;
}
㈩ 如何利用php獲取url反向代理後面的真實地址
下面的代碼用於獲得真實的客戶端ip,俗話說,道高一尺魔高一丈,更高級的偽裝能夠騙過這種檢測也有可能,不過至少讓偽裝的門檻提高不少。
function getip() {
$unknown = 'unknown';
if ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown) ) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif ( isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown) ) {
$ip = $_SERVER['REMOTE_ADDR'];
}
/*
處理多層代理的情況
或者使用正則方式:$ip = preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;
*/
if (false !== strpos($ip, ','))
$ip = reset(explode(',', $ip));
return $ip;
}
需要做下簡單解釋:
一、沒有使用代理伺服器的PHP獲取客戶端IP情況:
REMOTE_ADDR = 客戶端IP
HTTP_X_FORWARDED_FOR = 沒數值或不顯示
二、使用透明代理伺服器的情況:Transparent Proxies
REMOTE_ADDR = 最後一個代理伺服器 IP
HTTP_X_FORWARDED_FOR = 客戶端真實 IP (經過多個代理伺服器時,這個值類似:221.5.252.160, 203.98.182.163, 203.129.72.215)
這類代理伺服器還是將客戶端真實的IP發送給了訪問對象,無法達到隱藏真實身份的目的.
三、使用普通匿名代理伺服器的PHP獲取客戶端IP情況:Anonymous Proxies
REMOTE_ADDR = 最後一個代理伺服器 IP
HTTP_X_FORWARDED_FOR = 代理伺服器 IP (經過多個代理伺服器時,這個值類似:203.98.182.163, 203.98.182.163, 203.129.72.215)
這種情況下隱藏了客戶端的真實IP,但是向訪問對象透露了客戶端是使用代理伺服器訪問它們的.
四、使用欺騙性代理伺服器的情況:Distorting Proxies
REMOTE_ADDR = 代理伺服器 IP
HTTP_X_FORWARDED_FOR = 隨機的 IP(經過多個代理伺服器時,這個值類似:220.4.251.159, 203.98.182.163, 203.129.72.215)
這種情況下同樣透露了客戶端是使用了代理伺服器,但編造了一個虛假的隨機IP(220.4.251.159)代替客戶端的真實IP來欺騙它.
五、使用高匿名代理伺服器的PHP獲取客戶端IP情況:High Anonymity Proxies (Elite proxies)
REMOTE_ADDR = 代理伺服器 IP
HTTP_X_FORWARDED_FOR = 沒數值或不顯示
無論是REMOTE_ADDR還是HTTP_FORWARDED_FOR,這些頭消息未必能夠取得到,因為不同的瀏覽器不同的網路設備可能發送不同的IP頭消息.因此PHP使用$_SERVER["REMOTE_ADDR"] 、$_SERVER["HTTP_X_FORWARDED_FOR"] 獲取的值可能是空值也可能是「unknown」值.