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版(4)
Oct 09 PHP
用PHP4访问Oracle815
Oct 09 PHP
社区(php&amp;&amp;mysql)六
Oct 09 PHP
深入理解require与require_once与include以及include_once的区别
Jun 05 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
php合并数组中相同元素的方法
Nov 13 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
php+ajax无刷新上传图片实例代码
Nov 17 PHP
功能强大的PHP发邮件类
Aug 29 PHP
php事务回滚简单实现方法示例
Mar 28 PHP
老生常谈PHP中的数据结构:DS扩展
Jul 17 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
Apr 27 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
30个php操作redis常用方法代码例子
2014/07/05 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
2010/11/16 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
2015/08/07 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
Python ftp上传文件
2016/02/13 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
Python变量类型知识点总结
2019/02/18 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
如何用python 操作zookeeper
2020/12/28 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
尽职尽责村干部自我鉴定
2014/01/23 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
捐资助学感谢信
2015/01/21 职场文书
图书借阅制度范本
2015/08/06 职场文书
班级班风口号大全
2015/12/25 职场文书
Python实现机器学习算法的分类
2021/06/03 Python
业余无线电通联Q语
2022/02/18 无线电
MySQL导致索引失效的几种情况
2022/06/25 MySQL