php 使用curl模拟ip和来源进行访问的实现方法


Posted in PHP onMay 02, 2017

对于限制了ip和来源的网站,使用正常的访问方式是无法访问的。本文将介绍一种方法,使用php的curl类实现模拟ip和来源,访问那些限制了ip和来源的网站。

1.设置页面限制ip和来源访问

server.php

<?php

$client_ip = getip();
$referer = getreferer();

$allow_ip = '192.168.1.100';
$allow_referer = 'https://3water.com';

if($client_ip==$allow_ip && strpos($referer, $allow_referer)===0){
  echo 'allow access';
}else{
  echo 'deny access';
}


// 获取访问者ip
function getip(){
  if(!empty($_SERVER['HTTP_CLIENT_IP'])){
    $cip = $_SERVER['HTTP_CLIENT_IP'];
  }elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
    $cip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  }elseif(!empty($_SERVER['REMOTE_ADDR'])){
    $cip = $_SERVER['REMOTE_ADDR'];
  }else{
    $cip = '';
  }
  return $cip;
}

// 获取访问者来源
function getreferer(){
  if(isset($_SERVER['HTTP_REFERER'])){
    return $_SERVER['HTTP_REFERER'];
  }
  return '';
}

?>

2.使用curl正常访问

<?php
function doCurl($url, $data=array(), $header=array(), $timeout=30){

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

  $response = curl_exec($ch);

  if($error=curl_error($ch)){
    die($error);
  }

  curl_close($ch);

  return $response;

}

// 调用
$url = 'http://www.example.com/server.php';
$response = doCurl($url);

echo $response;
?>

返回 deny access

3.使用curl模拟ip和来源进行访问

模拟来源

curl_setopt($ch, CURLOPT_REFERER, '来源');

模拟ip

curl_setopt($ch, CURLOPT_HTTPHEADER, array('CLIENT-IP: 模拟ip','X-FORWARDED-FOR: 模拟ip'));

完整代码如下:

<?php
function doCurl($url, $data=array(), $header=array(), $referer='', $timeout=30){

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

  // 模拟来源
  curl_setopt($ch, CURLOPT_REFERER, $referer);

  $response = curl_exec($ch);

  if($error=curl_error($ch)){
    die($error);
  }

  curl_close($ch);

  return $response;

}

// 调用
$url = 'http://www.example.com/server.php';
$data = array();

// 设置IP
$header = array(
  'CLIENT-IP: 192.168.1.100',
  'X-FORWARDED-FOR: 192.168.1.100'
);

// 设置来源
$referer = 'https://3water.com/';

$response = doCurl($url, $data, $header, $referer, 5);

echo $response;
?>

返回 allow access

以上这篇php 使用curl模拟ip和来源进行访问的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP开发文件系统实例讲解
Oct 09 PHP
建立动态的WML站点(三)
Oct 09 PHP
程序员编程十条戒律
Jul 09 PHP
php获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
支持中文字母数字、自定义字体php验证码代码
Feb 27 PHP
php中stream(流)的用法
Mar 25 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
php强制运行广告的方法
Dec 01 PHP
利用php输出不同的心形图案
Apr 22 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
详解PHP字符串替换str_replace()函数四种用法
Oct 13 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
May 02 #PHP
php 函数使用可变数量的参数方法
May 02 #PHP
PHP 序列化和反序列化函数实例详解
Jul 18 #PHP
php头像上传预览实例代码
May 02 #PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 #PHP
AJAX的使用方法详解
Apr 29 #PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 #PHP
You might like
PHP新手上路(十四)
2006/10/09 PHP
php sprintf()函数让你的sql操作更安全
2008/07/23 PHP
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
Laravel5中contracts详解
2015/03/02 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
详解a++和++a的区别
2017/08/30 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
vue.config.js中配置Vue的路径别名的方法
2020/02/11 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
Python中的元类编程入门指引
2015/04/15 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
Python @property原理解析和用法实例
2020/02/11 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
如何使用Pytorch搭建模型
2020/10/26 Python
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
致1500米运动员广播稿
2014/02/07 职场文书
个人公开承诺书
2014/03/28 职场文书