За последние 24 часа нас посетили 17940 программистов и 1600 роботов. Сейчас ищут 897 программистов ...

Перенаправить POST запрос на другой сервер

Тема в разделе "Прочие вопросы по PHP", создана пользователем ZiV, 23 апр 2009.

  1. ZiV

    ZiV Активный пользователь

    С нами с:
    23 апр 2009
    Сообщения:
    10
    Симпатии:
    0
    Привет всем.
    Перейду сразу к делу. Есть 2 сервера.
    Назовем 1 сервер главным, а второй сторонним.
    На главном сервере существует регистрация. Требуется сделать на стороннем сервере подобную регистрацию только с пересылкой данных на главный сервер. Собственно такое уже сделано, но есть одно но- в некоторых случая можно узнать адрес главного сервера из окна баруезра, а заказчика это не устраивает - он требует полной конфиденциальности главного сервера. Было решено сделать следующее на стороннем сервере- создать прокси-скрипт который приняв на себя данные регистрации переслал бы их серверу через сокеты, вот только вопрос как это сделать наиболее оптимально ну или вообще как это сделать :)?. Через форму регистрации на сторонний сервер посылается текстовые поля + загруженный фаил. метод POST.

    Вообщем вопрос в следующем как переслать полученный POST запрос через сокеты на др сервер.

    Спасибо.
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Через cURL или сокеты. Моя симпафка сокетам, т.к. везде есть, а "курл" надо подключать и 50% вероятность, что он не стоит на сервере.

    Есть такая штука XML-RPC. Создана специально для обмена данными между удалёнными серверами. На один сервер посылается небольшое кол-во информации в виде XML, второй сервер принимает и отвечает (о удаче, о провале или какой-то информацией). Шлутся данные через сокеты.

    Из реализаций XML-RPC больше всего по душе эта:
    http://www.keithdevens.com/software/xmlrpc/

    Она простая, без лишних сущностей (надклассов с типами, чёртовы любители ООП) и ваще.
     
  3. ZiV

    ZiV Активный пользователь

    С нами с:
    23 апр 2009
    Сообщения:
    10
    Симпатии:
    0
    мне нужно реализовать именно пересылку полученного пост запроса через сокеты, как это сделать?
     
  4. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Чтобы сделать, в первую очередь надо вынуть голову на свет божий.

    Написал же, дал ссылки на документацию, даже на готовую библиотеку ссылку дал.
     
  5. ZiV

    ZiV Активный пользователь

    С нами с:
    23 апр 2009
    Сообщения:
    10
    Симпатии:
    0
    так этож придется поставить на второй сервер эту библиотеку....а мне надо избежать данного варианта... мне надо сделать скрипт который сделал вышеописанное без изменения структуры другого сервера...
     
  6. ZiV

    ZiV Активный пользователь

    С нами с:
    23 апр 2009
    Сообщения:
    10
    Симпатии:
    0
    вообщем если кому-то понадобиться я нашел пример на php.net....

    Код (Text):
    1. <?php
    2.         $header = "POST /$RegistrationProcessorScript HTTP/1.0\r\n";
    3.         $header .= "Host: $RegistrationProcessorHost\r\n";
    4.         $header .= "Content-Type: multipart/form-data; boundary=$boundary\r\n";
    5.  
    6.         foreach($_POST AS $index => $value){
    7.             $data .="--$boundary\r\n";
    8.             $data .= "Content-Disposition: form-data; name=\"".$index."\"\r\n";
    9.             $data .= "\r\n".$value."\r\n";
    10.             $data .="--$boundary\r\n";
    11.         }
    12.         foreach($_FILES AS $fieldname => $fileinfo)
    13.         {
    14.              $data .= "--$boundary\r\n";
    15.              if ($fileinfo['name'] != '')
    16.              {
    17.                 $content_file = join("", file($fileinfo['tmp_name']));
    18.                 $data.="Content-Disposition: file; name=\"".$fieldname."\"; filename=\"".$fileinfo['name']."\"\r\n";
    19.                 $data .= "Content-Type: ".$fileinfo['type']."\r\n\r\n";
    20.                 $data .= "".$content_file."\r\n";
    21.                 $data .="--$boundary\r\n";                
    22.              }
    23.         }
    24.         $data .="--$boundary--\r\n";
    25.  
    26.         $header .= "Content-length: " . strlen($data) . "\r\n\r\n";
    27.         $fp = @fsockopen($RegistrationProcessorHost, 80);
    28.         if ($fp)
    29.         {
    30.             fwrite($fp,$header.$data);
    31.             $response = "";
    32.             while(!feof($fp))
    33.                 $response .= fgets($fp, 128);
    34.             fclose($fp);    
    35.             header($response);
    36.  
    37.         }
    38. ?>