Запрос домена исходного сервера через cURL в PHP - PullRequest
2 голосов
/ 17 августа 2011

У меня есть 2 веб-сервера, сервер A и сервер B. Оба работают под управлением PHP5 + Apache + Ubuntu.

Сервер A отправляет запрос через cURL на PHP на сервер B. Я хотел бы получить исходный кодСерверный домен запроса.Насколько я знаю, $_SERVER['REMOTE_ADDR'] может получить IP-адрес исходного сервера (Сервер A).Если я хочу получить домен Сервера A, как я могу его получить?

ps Сервер 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 ]

2 голосов
/ 17 августа 2011
<?  
$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"] будет работать только при вызове scriptA через apache, например: " wget http://serverA/scritptA.php"

UPDATE:

Вы также можете отправить $domain = $_SERVER["SERVER_NAME"] в свои почтовые данные:

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

и в http://ServerB/handler.php получите с:

$icomefrom = $_POST['icomefrom'];

Таким образом, вам не нужно беспокоиться о фальшивых реферерах.

1 голос
/ 17 августа 2011

Как показывает статистика Pelshoff в своем комментарии выше, вы должны использовать собственный HTTP-заголовок:

Пользовательские заголовки HTTP: соглашения об именах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...