Tôi đang sử dụng kết nối socket trong PHP để đăng dữ liệu lên máy chủ web Apache. Tôi là một chút mới với kỹ thuật này, và tôi không chắc chắn làm thế nào để cô lập các tiêu đề từ cơ thể của phản ứng.Cách tách riêng phần đầu/thân HTTP khỏi yêu cầu Ổ cắm PHP
Mã Sending:
<?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;
?>
server Code:
Hello this is server. You posted:
<pre>
<?php print_r($_POST); ?>
</pre>
Khi gửi bài đến một máy chủ, tôi nhận được:
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>
Đúng như dự đoán. Tôi muốn loại bỏ các tiêu đề mặc dù, và chỉ cần đọc cơ thể từ "Xin chào đây là máy chủ ....." trở đi. Làm cách nào để phát hiện phần cuối của tiêu đề và đọc nội dung vào một biến?
Ngoài ra, máy chủ khác tôi đã thử nghiệm trên trả lời với điều này:
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
là gì các "4d" và "0" xung quanh phần nội dung ??
Cảm ơn!
PS trước khi ai đó nói sử dụng CURL, tôi không thể không may :-(
Không chắc về '4d' và '0', nhưng bạn có thể sử dụng' nổ (' \ r \ n \ r \ n ', $ result) 'khá đáng tin cậy. – Grexis