За последние 24 часа нас посетили 19128 программистов и 1629 роботов. Сейчас ищут 856 программистов ...

Можно ли из сценария PHP отправить на другой сайт данные...

Тема в разделе "PHP для новичков", создана пользователем kostyl, 7 май 2008.

  1. kostyl

    kostyl Guest

    Можно ли из сценария PHP отправить на другой сайт данные если изестно доменное имя и форма
    например на www.domen.com/page1.php ?
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
  3. kostyl

    kostyl Guest

  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
  5. kostyl

    kostyl Guest

    Короче говоря как организовать обмен между сценариями на разных доменах?
    Чтото похожее на web сервис? Типа скрипт на одном домене обращается к сервису на втором. Тот предоставляет ему необходимые данные, и первый продолжает работу?
     
  6. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    все ссылки выше актуальны!
     
  7. kostyl

    kostyl Guest

    PHP:
    1. <?php
    2. $fp = fsockopen("localhost", 80, $errno, $errstr, 30);
    3. if (!$fp) {
    4.     echo "$errstr ($errno)<br />\n";
    5. } else {
    6.     $out = "GET asd.php HTTP/1.1\r\n";
    7.     $out .= "Host:localhost \r\n";
    8.     $out .= "Connection: Close\r\n\r\n";
    9.  
    10.     fwrite($fp, $out);
    11.     while (!feof($fp)) {
    12.         echo fgets($fp, 128);
    13.     }
    14.     fclose($fp);
    15. }
    16. ?>
    Вот написал. Создал asd.php
    PHP:
    1.  
    2. <?php
    3. echo "Привет я эхо!";
    4. ?>
    и получаю:
    Bad Request
    Your browser sent a request that this server could not understand.
     
  8. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    вот все заголовки которые шлет мой фаер:
    Код (Text):
    1.  
    2. GET /asd.php HTTP/1.1
    3. Host: localhost:80
    4. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
    5. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    6. Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
    7. Accept-Encoding: gzip,deflate
    8. Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
    9. Keep-Alive: 300
    10. Connection: keep-alive
     
  9. kostyl

    kostyl Guest

    Я рад, а мне как быть? Мне надо чтобы скрипт работал потом соединился с другим сервером, получил от него пару значений, и работал дальше...
     
  10. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Лучше сравни?
    Код (Text):
    1. GET /asd.php HTTP/1.1
    Код (Text):
    1. GET asd.php HTTP/1.1
     
  11. kostyl

    kostyl Guest

    Ура, вернулось:

    HTTP/1.1 200 OK
    Date: Thu, 08 May 2008 04:45:04 GMT
    Server: Apache/2.2.4 (Win32) PHP/5.2.3
    X-Powered-By: PHP/5.2.3
    Content-Length: 13
    Connection: close
    Content-Type: text/html

    Привет я эхо!

    Только не понятно почему кроме "Привет я эхо!" остальное возвращает, можно это убрать как то?[/code][/php]

    Мда.. тупой вопрос, у меня ж в коде написано)))
    Кстате убираю вайл Привет я эхо уже не выводит?
     
  12. kostyl

    kostyl Guest

    Теперь пишу так:
    index.php
    Код (Text):
    1.  
    2. <?php
    3. set_time_limit(0);
    4. $data = "login=mylogin&password=555555456";
    5. $data_len = strlen($data);
    6. $fp = fsockopen("localhost", 80 , $errno, $errstr);
    7. if (!$fp) {
    8.     echo "$errstr ($errno)</br>\n";
    9. }
    10. else {
    11.     $out = "POST /asd.php HTTP/1.1\r\n";
    12.     $out .= "Host:localhost:80 \r\n";
    13.     $out .= "Content-length: ".$data_len."\r\n";
    14.     $out .= "Connection: close\r\n\r\n";
    15.     $out .= $data;
    16.     fwrite($fp, $out);
    17.     fclose($fp);
    18. }
    19. ?>
    asd.php
    Код (Text):
    1.  
    2. <?php
    3. echo "Привет я эхо!<br>";
    4. echo "Переданные параметры: <br>";
    5. echo "Метод GET: <br>";
    6. foreach ($_GET as $key=>$val){
    7.     echo "$key : $val <br>";
    8. }
    9. echo "Метод POST: <br>";
    10. foreach ($_POST as $key=>$val){
    11.     echo "$key : $val <br>";
    12. }
    13. ?>
    Выдает пустую страницу.
    В чем проблема, не пойму?
     
  13. kostyl

    kostyl Guest

    Кажись я начинаю понимать....
    Я думал fsockopen пошлет запрос локалхосту, тот запустит asd.php и выдаст мне в броузер результат работы asd.php.
    А тут оказывается по умному)))
    Тоесть я правильно понимаю?
    fsockopen посылает запрос локалхосту, локалхость запускает asd.php и возвращает запрос вместе с результатами работы
    asd.php обратно в скрипт index.php ?
     
  14. kostyl

    kostyl Guest

    Кстате ктото хот читает то что я пишу? Отзовитесь!!!

    Вот пишу я:
    index.php
    PHP:
    1.  
    2. <?php
    3. $data = "?login=my_login&password=123";
    4. $data_len = strlen($data);
    5. $fp = fsockopen("localhost", 80 , $errno, $errstr);
    6. if (!$fp) {
    7.     echo "$errstr ($errno)</br>\n";
    8. }
    9. else {
    10.     $out = "POST /asd.php HTTP/1.1\r\n";
    11.     $out .= "Host:localhost \r\n";
    12.     $out .= "Content-length: ".$data_len."\r\n";
    13.     $out .= "Connection: close\r\n\r\n ";
    14.     $out .= $data;
    15.     fwrite($fp, $out);
    16.     while (!feof($fp)){
    17.         $s .= fgets($fp,128);
    18.     }
    19.     //$result =
    20.     fclose($fp);
    21.     echo "$result $s";
    22. }
    23. ?>
    24.  
    asd.php
    PHP:
    1.  
    2. <?php
    3. foreach ($_POST as $key=>$value){
    4.     echo "$key : $value";
    5. }
    6. if (isset($_POST["login"]) && isset($_POST["password"])) {
    7.     if (($_POST["login"]=="my_login") && ( $_POST["password"]==123)){
    8.         echo 0.12151;
    9.     }
    10. }
    11. ?>
    12.  
    Браузер показывает:

    HTTP/1.1 200 OK Date: Thu, 08 May 2008 09:56:19 GMT Server: Apache/2.2.4 (Win32) PHP/5.2.3 X-Powered-By: PHP/5.2.3 Content-Length: 0 Connection: close Content-Type: text/html

    Возникают такие вопросы:
    1. Почему не отображается в бараузере 0.12151 и массив $_POST ?
    2. Почему могу повесить сервер если ставлю в $s .= fgets($fp,1); параметр 1 .... тоесть его нужно варьировать от каких тоусловий?
    3. Самый главный: Как мне убрать все то что пишет браузер запысывая в $result 0.12151. Надо через content type както, или просто от конца указателя отсчитывать.. тоже не удобно. если через content type то как именно?

    Заранее благодарю, сильно- сильно ))
     
  15. nimistar

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

    С нами с:
    30 май 2007
    Сообщения:
    919
    Симпатии:
    0
    Для начала у тебя неверно формируется пост данные для запроса в файле index.php, и соответственно ты не проходишь проверку по ифам в asd.php, поэтому пусто в ответе ....
    Во-вторых - обмен заголовками ОБЯЗАТЕЛЕН .. и от этого никуда не дется ... но вот смотри ты в своем файле определяешь заголовок 2-мя ентрами , но очевидно не понимаешь зачем ... стоит разобраться со стандартами передачи данных в протоколе http - без этого продолжать бесмысленно ....
    В третьих - все твои вопросы от незнания, и ты хочешь чтобы тебе здесь кто-нить накатал статью как все это работает ? ... вот этого точно никто делать не будет ... твои вопросы касаются фундаментальных понятий работы с АшттП, а соответственно найти статьи это описывающие, не составит труда!
     
  16. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А что ты хочешь увидеть? То, что скрипт asd.php печатает с помощью echo? :lol:
    Сматри - ты чтобы передать пакет скрипту ads.php должен написать кучу заголовков. С чего ты взял, что функция echo узнает, кто вызывал скрипт, в котором она запущена, сформирует пакет, отправит нужные заголовки и тело ответа ввиде того, что она должна вывести в потоке вывода?
     
  17. kostyl

    kostyl Guest

    Ну я ж пишу, какая разница какие в asd
    PHP:
    1.  
    2. <?php
    3. foreach ($_POST as $key=>$value){
    4.     echo "$key : $value";
    5. }
    6. ?>
    7.  
    причем тут ифы? должно ведь хоть чтото выдать?
     
  18. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    kostyl
     
  19. kostyl

    kostyl Guest

    my_login : password :
    или хотя бы
    key : value
     
  20. kostyl

    kostyl Guest

    ПОчитал я http://www.i2r.ru/static/247/out_3771.shtml
    и все равно не пойму с методом POST
    пожалуйста можете мне подсказать почему не выводиться массив?
     
  21. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Код (Text):
    1. $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
     
  22. kostyl

    kostyl Guest

    вот спасибо, вот молодец!

    А нет у кого ссылки почитать про зарегистрированные типы контента?
     
  23. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0