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生成HTML静态页面实例代码
Aug 31 PHP
PHP foreach循环使用详解与实例代码
May 08 PHP
php下连接mssql2005的代码
Jan 17 PHP
关于PHP的curl开启问题探讨
Apr 08 PHP
调试PHP程序的多种方法介绍
Nov 06 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
php求今天、昨天、明天时间戳的简单实现方法
Jul 28 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 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
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
php5.3 废弃函数小结
2010/05/16 PHP
php的dl函数用法实例
2014/11/06 PHP
最新最全PHP生成制作验证码代码详解(推荐)
2016/06/12 PHP
PHP实现计算器小功能
2020/08/28 PHP
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
js实现消息滚动效果
2017/01/18 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
Python实现的弹球小游戏示例
2017/08/01 Python
Python 文件操作的详解及实例
2017/09/18 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
大学校园活动策划书
2014/02/04 职场文书
给校长的建议书600字
2014/05/15 职场文书
服装发布会策划方案
2014/05/22 职场文书
承诺书范本
2015/01/21 职场文书
个人求职意向书
2015/05/11 职场文书
拉贝日记观后感
2015/06/05 职场文书
卡特教练观后感
2015/06/08 职场文书
公司员工离职感言
2015/08/03 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
python实现高效的遗传算法
2021/04/07 Python
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android
HTML常用标签超详细整理
2022/03/19 HTML / CSS