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 set_time_limit(0) 设置程序执行时间的函数
May 26 PHP
php的字符串用法小结
Jun 08 PHP
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
php日期转时间戳,指定日期转换成时间戳
Jul 17 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
PHP程序员基本要求和必备技能
May 09 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
php格式文件打开的四种方法
Feb 24 PHP
php获取微信openid方法总结
Oct 10 PHP
如何在centos8自定义目录安装php7.3
Nov 28 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设计模式中工厂模式详细介绍
2013/05/15 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
用jscript实现列出安装的软件列表
2007/06/18 Javascript
IE图片缓存document.execCommand(&quot;BackgroundImageCache&quot;,false,true)
2011/03/01 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
javascript中Function类型详解
2015/04/28 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
2016/05/03 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
vue随机验证码组件的封装实现
2020/02/19 Javascript
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
基于python调用psutil模块过程解析
2019/12/20 Python
python如何处理程序无法打开
2020/06/16 Python
GitHub上值得推荐的8个python 项目
2020/10/30 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
创伤外科专业推荐信范文
2013/11/19 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
辞职信怎么写
2015/02/27 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
推普标语口号大全
2015/12/26 职场文书
初中美术教学反思
2016/02/17 职场文书