2011-08-17 44 views
2

我有2个Web服务器,服务器A &服务器B.都运行PHP5 + Apache + Ubuntu环境。通过PHP中的cURL请求源服务器域

服务器A通过PHP中的cURL向服务器B发送请求。我想获取请求的源服务器域。据我所知,$_SERVER['REMOTE_ADDR']可以得到源服务器(服务器A)的IP。如果我想获得服务器A的域名,我该如何获取它?

p.s.服务器A承载多个域,因此在这种情况下反向IP解析不起作用。

这里是代码:

$data = array('user' => $user, 'pass' => $pass); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://ServerB/handler.php'); 
curl_setopt($ch, CURLOPT_PORT, 80); 
curl_setopt($ch, CURLOPT_VERBOSE, 0); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

$ans_xml = curl_exec($ch); 
+2

你可以添加它作为一个HTTP标题也许?或者作为数据字段之一?我不认为普通的HTTP请求将域添加到标题。 – Pelshoff 2011-08-17 11:19:35

回答

2
<? 
$data = array('user' => $user, 'pass' => $pass, 'appid' => 'pukeko'); 
$domain = $_SERVER["SERVER_NAME"]; // user the super global $_SERVER["SERVER_NAME"] or set it manually to, ex: http://www.myserver.com 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://ServerB/handler.php'); 
curl_setopt($ch, CURLOPT_PORT, 80); 
curl_setopt($ch, CURLOPT_VERBOSE, 0); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_REFERER, $domain); // USE CURLOPT_REFERER to set the referer 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

$ans_xml = curl_exec($ch); 
?> 

<? 
// ServerB - http://ServerB/handler.php 
$referer = $_SERVER['HTTP_REFERER']; // http://www.myserver.com 
?> 

超级全球$ _ SERVER [ “SERVER_NAME”]只有在您通过apache拨打scriptA才有效,例如: “wget的http://serverA/scritptA.php

UPDATE:

您也可以在您的文章发送数据$domain = $_SERVER["SERVER_NAME"]

$icomefrom = $_POST['icomefrom']; 

$domain = $_SERVER["SERVER_NAME"] 
$data = array('user' => $user, 'pass' => $pass, 'appid' => 'pukeko', 'icomefrom' => $domain); 

,并在http://ServerB/handler.php用得到它

这样你不必担心假冒推荐人。

+0

这是完美的!但如何防止某人伪造相同的请求? – Raptor 2011-08-18 06:35:39