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通用检测函数集合
Nov 25 PHP
php xml 入门学习资料
Jan 01 PHP
php 代码优化之经典示例
Mar 24 PHP
eAccelerator的安装与使用详解
Jun 13 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
Jul 22 PHP
php使用类继承解决代码重复的问题
Feb 11 PHP
php多线程并发实现方法
Sep 30 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
Mar 05 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
PHP判断json格式是否正确的实现代码
Sep 20 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
珊瑚虫IP库浅析
2007/02/15 PHP
How do I change MySQL timezone?
2008/03/26 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
使用python调用zxing库生成二维码图片详解
2017/01/10 Python
zookeeper python接口实例详解
2018/01/18 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
python实现猜数字小游戏
2020/03/24 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
个人自我评价分享
2013/12/20 职场文书
租车协议书范本
2014/04/22 职场文书
青安岗事迹材料
2014/05/14 职场文书
应用外语系自荐信
2014/06/26 职场文书
党校学习心得体会范文
2014/09/09 职场文书
机关作风建设自查报告
2014/10/22 职场文书
银行求职信怎么写
2019/06/20 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
redis 查看所有的key方式
2021/05/07 Redis