За последние 24 часа нас посетили 15120 программистов и 1764 робота. Сейчас ищут 1660 программистов ...

отправляем POST запрос хедерами, получаем ответ

Тема в разделе "PHP для новичков", создана пользователем gafarov_, 18 ноя 2010.

  1. gafarov_

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

    С нами с:
    16 сен 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Узбекистан, Навои - Томск - Санкт - Петербург
    Привет, всем!
    Отправляю пост-запрос, получаю ответ типа:
    Код (Text):
    1.  
    2. HTTP/1.1 200 OK
    3. Date: Thu, 18 Nov 2010 10:09:34 GMT
    4. Server: Apache/2.2.14 (Ubuntu)
    5. X-Powered-By: PHP/5.3.2-1ubuntu4.5
    6. Connection: close
    7. Vary: Accept-Encoding
    8. Content-Length: 83
    9. Content-Type: text/plain
    10.  
    11. <pre>res=Array
    12. (
    13.     [0] => 72940
    14.     [1] => 72970
    15.     [2] => 72942
    16. )
    17. </pre>
    Ответ на сервере как Вы видите сформировываю я. Вот и вопрос: можно ли ответить, "как будто запросом", т.е. назад передать не текст res=... , а переменную - массив. Т.е. как-будто бы выполнить POST-запрос и в нем передать данные. Но пост я видимо не смогу сделать, потому что он требует айпи клиента, а клиент может быть без белоги айпи.
    Или все же парсить текст ответа и извлекать и самому сформировывать из него массив.
    Подскажите как быть. Спасибо.
     
  2. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Сломал моск.
    Ещё раз русским языком по пунктам.
     
  3. gafarov_

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

    С нами с:
    16 сен 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Узбекистан, Навои - Томск - Санкт - Петербург
    Так и думал :)

    В общем так. Когда мы выполняем запрос, мы передаем переменные и их значения http://superservak.ru/index.php?I=am&status=star

    В скрипте, который отвечает на этот запрос мы будем иметь две переменные I и status в массиве $_REQUEST.

    В ответ сервер по умолчанию присылает ответ 200, если до него достучались и все ок. Эту инфу он отправляет хедерами:

    Код (Text):
    1. header('Content-type: text/plain');
    2. header('Connection: close');
    3. echo "<pre>res=";
    4. print_r($responceArray);
    5. echo "</pre>";
    Я бы хотел чтобы в этих хедерах переменная не возвращалась в виде текста, чтобы возвращалась как значение другой переменной. Т.е. как будто мы в ответ сделали запрос http://client.ru/index.php?res_array=$responceArray. Т.е. что-то вроде получения этой переменной в массиве $_REQUEST или в другой переменой. Но чтобы не пришлось текст ответа парсить.
     
  4. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
  5. gafarov_

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

    С нами с:
    16 сен 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Узбекистан, Навои - Томск - Санкт - Петербург
    вот так:
    Код (Text):
    1.  
    2. $data = 'Много вяких данных';
    3.             $packet="POST /orders.php HTTP/1.0\r\n";
    4.             $packet.="Host: 192.168.20.40\r\n";
    5.             $packet.="Content-Length: ".strlen($data)."\r\n";
    6.             $packet.="Referer: http://192.168.20.40/send.php\r\n";
    7.             $packet.="Content-Type: application/x-www-form-urlencoded\r\n";
    8.             $packet.="Connection: close\r\n";
    9.             $packet.="Cache-Control: no-cache\r\n\r\n";
    10.             $packet.=$data."\r\n\r\n";
    11.             $ock=fsockopen('192.168.20.40', '80');
    12.             if (!$ock) echo 'no connection';
    13.  
    14.             fputs($ock,$packet);
    15.             $responce='';
    16.             while (!feof($ock))
    17.             {
    18.                 $responce.=fgets($ock);
    19.             }
    20.             fclose($ock);
    21.             echo $responce;
     
  6. gafarov_

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

    С нами с:
    16 сен 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Узбекистан, Навои - Томск - Санкт - Петербург
    Ну что? я понимаю нет такого решения? Только если парсить ответ и извлекать оттуда данные?
     
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Ответ по любому парсить.
    Можно обратиться через file_get_contents и словить хедеры в $http_response_header, но все равно нужно будет парсить некий заголовок.
    Ну и если нужен формат как в POST:
    http://ru.php.net/manual/en/function.ht ... -query.php
    http://ru.php.net/manual/en/function.parse-str.php
    Но я бы лучше использовал
    http://ru.php.net/manual/en/function.serialize.php
    http://ru.php.net/manual/en/function.unserialize.php
    или
    http://ru.php.net/manual/en/ref.json.php
     
  8. gafarov_

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

    С нами с:
    16 сен 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Узбекистан, Навои - Томск - Санкт - Петербург
    Я то серваку с клиента отправляю в json -формате. Если юзать file_get_contents, то получается к названию файла приписываешь data=new&name=Artur&age=23, а это значит GET запрос, а так как данных передаю много, то надо бы POST.
     
  9. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
  10. gafarov_

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

    С нами с:
    16 сен 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Узбекистан, Навои - Томск - Санкт - Петербург
    Вот это уже лучше :) Спасибо, сейчас закончу кое что и возьмусь за это :)
     
  11. gafarov_

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

    С нами с:
    16 сен 2009
    Сообщения:
    17
    Симпатии:
    0
    Адрес:
    Узбекистан, Навои - Томск - Санкт - Петербург
    Вообще отлично!
    Получил от сервера такой ответ:
    Код (Text):
    1. Array
    2. (
    3.     [0] => HTTP/1.1 200 OK
    4.     [1] => Date: Fri, 19 Nov 2010 11:46:01 GMT
    5.     [2] => Server: Apache/2.2.14 (Ubuntu)
    6.     [3] => X-Powered-By: PHP/5.3.2-1ubuntu4.5
    7.     [4] => Connection: close
    8.     [5] => Data: [72940,72970,72942]
    9.     [6] => Vary: Accept-Encoding
    10.     [7] => Content-Length: 0
    11.     [8] => Content-Type: text/plain
    12. )
    Где Data - это данные в формате json, их декодировал json_decode(data, true) и получил массивчик красивенький:

    Код (Text):
    1. Array
    2. (
    3.     [0] => 72940
    4.     [1] => 72970
    5.     [2] => 72942
    6. )
    Спасибо Большое!!!