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中养成7个面向对象的好习惯
Jul 17 PHP
Php图像处理类代码分享
Jan 19 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
php生成百度sitemap站点地图类函数实例
Oct 17 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
php类的定义与继承用法实例
Jul 07 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
PHP编译configure时常见错误的总结
Aug 17 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 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类与对象中的private访问控制的疑问
2012/11/01 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
js屏蔽鼠标键盘(右键/Ctrl+N/Shift+F10/F11/F5刷新/退格键)
2013/01/24 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
[42:24]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第一场 11.01
2020/11/02 DOTA
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
Python内存读写操作示例
2018/07/18 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
举例说明类变量和实例变量的区别
2016/06/30 面试题
酒店销售主管岗位职责
2014/01/04 职场文书
人民教师求职自荐信
2014/03/12 职场文书
我的求职择业计划书
2014/04/04 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL
Python中requests库的用法详解
2022/06/05 Python