Как изолировать HTTP-заголовки/тело от запроса PHP Sockets

Я использую сокетное соединение в PHP для отправки данных на веб-сервер Apache. Я немного новичок в этой технике и не уверен, как изолировать заголовки от тела ответа.

Код отправителя:

<?php
// collect data to post
$postdata = array(
    'hello' => 'world'
);
$postdata = http_build_query($postdata);
// open socket, send request
$fp = fsockopen('127.0.0.1', 80);
fwrite($fp, "POST /server.php HTTP/1.1\r\n");
fwrite($fp, "Host: fm1\r\n");
fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
fwrite($fp, "Content-Length: ".strlen($postdata)."\r\n");
fwrite($fp, "Connection: close\r\n");
fwrite($fp, "\r\n");
fwrite($fp, $postdata);
// go through result
$result = "";
while(!feof($fp)){
    $result .= fgets($fp);
}
// close
fclose($fp);
// display result
echo $result;
?>

Код сервера:

Hello this is server. You posted:
<pre>
<?php print_r($_POST); ?>
</pre>

При отправке на один сервер я получаю:

HTTP/1.1 200 OK
Date: Fri, 06 Jan 2012 09:55:27 GMT
Server: Apache/2.2.15 (Win32) mod_ssl/2.2.15 OpenSSL/0.9.8m PHP/5.3.2
X-Powered-By: PHP/5.3.2
Content-Length: 79
Connection: close
Content-Type: text/html

Hello this is server. You posted:
<pre>
Array
(
    [hello] => world
)
</pre>

Как и ожидалось. Однако я хочу убрать заголовки и просто прочитать тело, начиная с "Hello this is server....." и далее. Как я могу надежно определить конец заголовков и прочитать тело в переменную?

Также, другой сервер, на котором я тестировал, отвечает следующее:

HTTP/1.1 200 OK
Date: Fri, 06 Jan 2012 10:02:04 GMT
Server: Apache/2
X-Powered-By: PHP/5.2.17
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

4d
Hello this is server. You posted:
<pre>
Array
(
    [hello] => world
)
</pre>
0

Что за "4d" и "0" вокруг текста тела???

Спасибо!

PS прежде чем кто-то скажет использовать CURL, я к сожалению не могу :-(

9
задан Rob 6 January 2012 в 10:09
поделиться