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数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 PHP
php排序算法(冒泡排序,快速排序)
Oct 09 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
php编写简单的文章发布程序
Jun 18 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
PHP实现递归复制整个文件夹的类实例
Aug 03 PHP
WordPress中用于获取文章作者与分类信息的方法整理
Dec 17 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
详解PHP如何更好的利用PHPstorm的自动提示
Aug 18 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 SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
javascript json 新手入门文档
2009/12/03 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
js实现select组件的选择输入过滤代码
2014/10/14 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)
2015/11/29 Javascript
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
node内置调试方法总结
2018/02/22 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
python之PyMongo使用总结
2017/05/26 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
EJB面试题
2015/07/28 面试题
正隆泰信息技术有限公司上机题
2012/06/14 面试题
教育专业个人求职信
2013/12/02 职场文书
关于赌博的检讨书
2014/01/08 职场文书
幸福中国演讲稿
2014/09/12 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
社区法制宣传月活动总结
2015/05/07 职场文书