Привет, всем! Отправляю пост-запрос, получаю ответ типа: Код (Text): HTTP/1.1 200 OK Date: Thu, 18 Nov 2010 10:09:34 GMT Server: Apache/2.2.14 (Ubuntu) X-Powered-By: PHP/5.3.2-1ubuntu4.5 Connection: close Vary: Accept-Encoding Content-Length: 83 Content-Type: text/plain <pre>res=Array ( [0] => 72940 [1] => 72970 [2] => 72942 ) </pre> Ответ на сервере как Вы видите сформировываю я. Вот и вопрос: можно ли ответить, "как будто запросом", т.е. назад передать не текст res=... , а переменную - массив. Т.е. как-будто бы выполнить POST-запрос и в нем передать данные. Но пост я видимо не смогу сделать, потому что он требует айпи клиента, а клиент может быть без белоги айпи. Или все же парсить текст ответа и извлекать и самому сформировывать из него массив. Подскажите как быть. Спасибо.
Так и думал В общем так. Когда мы выполняем запрос, мы передаем переменные и их значения http://superservak.ru/index.php?I=am&status=star В скрипте, который отвечает на этот запрос мы будем иметь две переменные I и status в массиве $_REQUEST. В ответ сервер по умолчанию присылает ответ 200, если до него достучались и все ок. Эту инфу он отправляет хедерами: Код (Text): header('Content-type: text/plain'); header('Connection: close'); echo "<pre>res="; print_r($responceArray); echo "</pre>"; Я бы хотел чтобы в этих хедерах переменная не возвращалась в виде текста, чтобы возвращалась как значение другой переменной. Т.е. как будто мы в ответ сделали запрос http://client.ru/index.php?res_array=$responceArray. Т.е. что-то вроде получения этой переменной в массиве $_REQUEST или в другой переменой. Но чтобы не пришлось текст ответа парсить.
вот так: Код (Text): $data = 'Много вяких данных'; $packet="POST /orders.php HTTP/1.0\r\n"; $packet.="Host: 192.168.20.40\r\n"; $packet.="Content-Length: ".strlen($data)."\r\n"; $packet.="Referer: http://192.168.20.40/send.php\r\n"; $packet.="Content-Type: application/x-www-form-urlencoded\r\n"; $packet.="Connection: close\r\n"; $packet.="Cache-Control: no-cache\r\n\r\n"; $packet.=$data."\r\n\r\n"; $ock=fsockopen('192.168.20.40', '80'); if (!$ock) echo 'no connection'; fputs($ock,$packet); $responce=''; while (!feof($ock)) { $responce.=fgets($ock); } fclose($ock); echo $responce;
Ответ по любому парсить. Можно обратиться через 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
Я то серваку с клиента отправляю в json -формате. Если юзать file_get_contents, то получается к названию файла приписываешь data=new&name=Artur&age=23, а это значит GET запрос, а так как данных передаю много, то надо бы POST.
Вообще отлично! Получил от сервера такой ответ: Код (Text): Array ( [0] => HTTP/1.1 200 OK [1] => Date: Fri, 19 Nov 2010 11:46:01 GMT [2] => Server: Apache/2.2.14 (Ubuntu) [3] => X-Powered-By: PHP/5.3.2-1ubuntu4.5 [4] => Connection: close [5] => Data: [72940,72970,72942] [6] => Vary: Accept-Encoding [7] => Content-Length: 0 [8] => Content-Type: text/plain ) Где Data - это данные в формате json, их декодировал json_decode(data, true) и получил массивчик красивенький: Код (Text): Array ( [0] => 72940 [1] => 72970 [2] => 72942 ) Спасибо Большое!!!