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
关于PHP session 存储方式的详细介绍
Jun 25 PHP
php将图片保存入mysql数据库失败的解决方法
Dec 27 PHP
discuz目录文件资料汇总
Dec 30 PHP
php限制ip地址范围的方法
Mar 31 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
php简单备份与还原MySql的方法
May 09 PHP
CI框架集成Smarty的方法分析
May 17 PHP
PHP7常量数组用法分析
Sep 26 PHP
AJAX的使用方法详解
Apr 29 PHP
php微信公众号开发之简答题
Oct 20 PHP
浅谈PHP各环境下的伪静态配置
Mar 13 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过滤危险html代码
2008/08/18 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
php桥接模式应用案例分析
2019/10/23 PHP
Jquery iframe内部出滚动条
2010/02/11 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
Python argv用法详解
2016/01/08 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
python urllib爬虫模块使用解析
2019/09/05 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
2020/04/24 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
清洁工岗位职责
2014/01/29 职场文书
怎样写好自我评价呢?
2014/02/16 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
黑白记忆观后感
2015/06/18 职场文书
退休欢送会主持词
2015/07/01 职场文书
结婚幸福感言
2015/08/01 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python
Java Redisson多策略注解限流
2022/09/23 Java/Android