对于限制了ip和来源的网站,使用正常的访问方式是无法访问的。本文将介绍一种方法,使用php的curl类实现模拟ip和来源,访问那些限制了ip和来源的网站。
1.设置页面限制ip和来源访问
server.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<?php $client_ip = getip(); $referer = getreferer(); $allow_ip = '192.168.1.100' ; 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正常访问
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?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'));
完整代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<?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' ); // 设置来源 $response = doCurl( $url , $data , $header , $referer , 5); echo $response ; ?> |
返回 allow access
以上这篇php 使用curl模拟ip和来源进行访问的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。