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也可以?成Shell Script
Oct 09 PHP
PHP网站基础优化方法小结
Sep 29 PHP
php 操作excel文件的方法小结
Dec 31 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
php中serialize序列化与json性能测试的示例分析
Apr 27 PHP
PHP生成不同颜色、不同大小的tag标签函数
Sep 23 PHP
详解PHP的Yii框架中的Controller控制器
Mar 29 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
Jun 28 PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 PHP
数据结构之利用PHP实现二分搜索树
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
php从文件夹随机读取文件的方法
2015/06/01 PHP
php实现微信支付之退款功能
2018/05/30 PHP
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
javascript弹性运动效果简单实现方法
2016/01/08 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
浅谈Express.js解析Post数据类型的正确姿势
2019/05/30 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
python访问sqlserver示例
2014/02/10 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
Django--权限Permissions的例子
2019/08/28 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
英国女性时尚品牌:Apricot
2018/12/04 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
大学生预备党员自我评价
2015/03/04 职场文书
我的1919观后感
2015/06/03 职场文书
环保宣传语大全
2015/07/13 职场文书
python中print格式化输出的问题
2021/04/16 Python