⑴ 為什麼我php 用curl_proxy 不生效
這個是PHP的curl的代理模式,這個模式你在使用的時候是需要配合其他的一起使用的。所以單純說這個沒有用還要看你其他的代碼怎麼寫。
希望你可以把代碼放上來看看。
⑵ PHP使用代理方法獲取遠程網頁的代碼.
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;
}
$url_page="http://www..com";
$user_agent="Mozilla/4.0";
$proxy="http://192.11.222.124:8000";//這里是http代理
$string=curl_string($url_page,$user_agent,$proxy);
echo$string;
⑶ 如何向PHP偽造自己的ip
要看具體代碼是怎麼寫的,如果代碼寫得不好是有可能偽造的。
獲取IP的方法有幾種,通過例子看一下,這個是ThinkPHP里的獲取IP的函數:
/**
* 獲取客戶端IP地址
* @param integer $type 返回類型 0 返回IP地址 1 返回IPV4地址數字
* @param boolean $adv 是否進行高級模式獲取(有可能被偽裝)
* @return mixed
*/
function get_client_ip($type = 0,$adv=false) {
$type = $type ? 1 : 0;
static $ip = NULL;
if ($ip !== NULL) return $ip[$type];
if($adv){
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$pos = array_search('unknown',$arr);
if(false !== $pos) unset($arr[$pos]);
$ip = trim($arr[0]);
}elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
}elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
// IP地址合法驗證
$long = sprintf("%u",ip2long($ip));
$ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
return $ip[$type];
}
$_SERVER['HTTP_CLIENT_IP'] 是HTTP信息中的IP,存在於http請求的header中,可以偽造;
$_SERVER["REMOTE_ADDR"] 可取得客戶端的 IP 地址,但如果客戶端是使用代理伺服器來訪問,那取到的就是代理伺服器的 IP 地址,而不是真正的客戶端 IP 地址。不可以偽造,但可以用代理。
$_SERVER["HTTP_X_FORWARDED_FOR"] 可以透過代理伺服器取得客戶端的真實 IP 地址,但有時候也不管用,也可以偽造。
⑷ 代理模式的實現方式
下面我舉個例子來說明這一切:
場景:業務類CompanyManager在調用Save方法的時候需要調用SecurityManager類判斷許可權是否足夠
第一種實現方式,我們通常會這樣做:直接在CompanyManager類中調用ISecurityManager介面的IsPass方法判斷許可權。
public class SimpleCompanyManager : ICompanyManager
{
可通過外部注入的屬性#region 可通過外部注入的屬性
public string UserName { get; set; }
public CompanyDao Dao { get; set; }
#endregion
public void Save()
{
//判斷許可權
ISecurityManager security = new SecurityManager();
if (security.IsPass(UserName))
{
//執行業務方法
//.
//調用DAO層方法
Dao.Save();
}
else
{
//執行其它業務方法
Console.WriteLine("您沒有該許可權");
}
}
}
這樣CompanyManager類與ISecurityManager或SecurityManager會發生業務性耦合。聰明的朋友會發現在GOF(設計模式)中有一種模式(代理模式)可以解除這種耦合。
代理模式(Proxy Pattern):什麼是代理模式?是給某一個對象提供一個代理對象,並由代理對象控制對源對象的引用。代理就是一個人或一個機構代表另一個人或者一個機構採取行動。某些情況下,客戶不想或者不能夠直接引用一個對象,代理對象可以在客戶和目標對象直接起到中介的作用。客戶端分辨不出代理主題對象與真實主題對象。代理模式可以並不知道真正的被代理對象,而僅僅持有一個被代理對象的介面,這時候代理對象不能夠創建被代理對象,被代理對象必須有系統的其他角色代為創建並傳入
CompanyManager
public class CompanyManager : ICompanyManager
{
可通過外部注入的屬性#region 可通過外部注入的屬性
public string UserName { get; set; }
public CompanyDao Dao { get; set; }
#endregion
public void Save()
{
//執行業務方法
//.
//調用DAO層方法
Dao.Save();
}
}
CompanyProxyManager
public class CompanyProxyManager : ICompanyManager
{
public string UserName { get; set; }
private ICompanyManager target = new CompanyManager();
public void Save()
{
//判斷許可權
ISecurityManager security = new SecurityManager();
if (security.IsPass(UserName))
{
//調用目標對象Save方法
target.Save();
}
else
{
Console.WriteLine("您沒有該許可權");
}
}
}
這樣,CompanyManager類就不必與判斷許可權的類SecurityManager耦合
代理模式作用就是接觸業務耦合,保證業務的獨立性
摘自 劉冬的博客園
⑸ PHP代碼如何放行代理伺服器IP
<?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面試題】請寫出php代理模式的偽代碼
小白不懂題目的意思,難道是偽造CURL來源IP?
不過偽造IP倒也是必須用代理
比如: curl_setopt($curl, CURLOPT_PROXY, "http://116.236.216.116:8080/");
⑺ 用PHP代碼如何實現真實IP和代理IP
幫你編一段測試代碼,樓主試試吧!
<?PHP
if ($_SERVER['HTTP_X_FORWARDED_FOR'] == "")
{
echo '您的IP地址是:'.$_SERVER['HTTP_X_FORWARDED_FOR']."
";
echo '沒有使用代理。
'
}
else
{
echo '您的IP地址是:'.$_SERVER['HTTP_X_FORWARDED_FOR']."
";
echo '代理的IP地址:'.$_SERVER['REMOTE_ADDR'].'
';
}
?>
這代碼只能正確顯示對方使用透明代理時的結果~
希望對你有幫助!
⑻ 如何自己用PHP編寫偽代碼程序
偽代碼寫的代碼和編程寫的代碼思想是一樣的,只是語法上偽代碼比較隨意點,在編譯器里不能直接編譯。反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
⑼ php代理問題
你應該是資料庫管理的吧,必須有一個會員表吧,每個會員一條記錄,記錄每個會員的相關信息,大概有這些欄位:
會員表(會員ID,姓名,會員級別(1,2,3),上級會員ID,祖宗會員ID)
會員ID可以使用身份證號,也可以讓資料庫自己編碼,新增加會員需要做三件事情:
獲取上級會員的祖宗會員ID,
SELECT 祖宗ID FROM 會員表 WHERE 會員ID='推薦人ID'
添加會員
INSERT INTO 會員表 VALUES ('新會員ID','新會員姓名','新會員默認級別例如3','推薦人ID','祖宗ID')
修改推薦人的級別
SELECT COUNT(*) FROM 會員表 WHERE 上級會員ID='推薦人ID'
如果查詢的結果數量>=10,那麼執行下面的修改
UPDATE 會員表 SET 會員級別=2 WHERE 會員ID='推薦人ID' AND會員級別=3
⑽ 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";