对于限制了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和来源进行访问的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。