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 相关文章推荐
我的论坛源代码(一)
Oct 09 PHP
人尽可用的Windows技巧小贴士之下篇
Mar 22 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
php网站被挂木马后的修复方法总结
Nov 06 PHP
PHP中使用GD库创建圆形饼图的例子
Nov 19 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
Jan 05 PHP
Zend Framework实现多文件上传功能实例
Mar 21 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
php扩展开发入门demo示例
Sep 23 PHP
解决Laravel无法使用COOKIE和SESSION的问题
Oct 16 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_Flame(Version:Progress)的原代码
2006/10/09 PHP
目录,文件操作详谈―PHP
2006/11/25 PHP
php中的strpos使用示例
2014/02/27 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
vue回到顶部监听滚动事件详解
2019/08/02 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
python client使用http post 到server端的代码
2013/02/10 Python
Python中的作用域规则详解
2015/01/30 Python
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
python爬虫基本知识
2018/03/05 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
毕业生简单求职信
2013/11/19 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
高中生旷课检讨书
2014/10/08 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技