⑴ 为什么我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";