这里有新鲜出炉的 PHP 设计模式,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
下面小编就为大家带来一篇 php 使用 curl 模拟 ip 和来源进行访问的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
对于限制了 ip 和来源的网站,使用正常的访问方式是无法访问的。本文将介绍一种方法,使用 php 的 curl 类实现模拟 ip 和来源,访问那些限制了 ip 和来源的网站。
1. 设置页面限制 ip 和来源访问
server.php
- <?php
- $client_ip = getip();
- $referer = getreferer();
- $allow_ip = '192.168.1.100';
- $allow_referer = 'http://www.phperz.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 = 'http://www.phperz.com/';
- $response = doCurl($url, $data, $header, $referer, 5);
- echo $response;
- ?>
返回 allow access
以上这篇 php 使用 curl 模拟 ip 和来源进行访问的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 PHPERZ。
来源: http://www.phperz.com/article/17/0806/340009.html