在保持模式下判断HTTP请求结束的实现代码
复制代码代码如下所示:
/ / $ FP由fsockopen(手柄)
而(!Feof($ FP)){
回声fgets($ FP);
}
(注意:短连接模式用连接标记在头上:关闭,长连接标记为连接:保持生存状态。默认情况下,HTTP / 1默认使用短连接,而HTTP / 1.1默认使用长连接)。
Long connection (also known as persistent connection) mode HTTP server sends after the data and constantly open connection, but keep the next HTTP request, so long connection benefit is obviously, by sharing an TCP connection to save after the request to establish / disconnects overhead.EOF is not sent until the end of the TCP connection (timeout or error), so we cannot use the above method to determine the end of a HTTP request.This is also a problem that will be encountered when using long connections.At present, there are two main methods to judge.
(1)根据头部中的内容长度字段,这个字段指示文本的长度,我们可以以指定长度的字符作为判断结束的依据。
(2)在内容长度的情况下,根据transfer-encoding.sometimes服务器无法确定文本的大小,因为文本可以动态生成的,所以它不会提供内容长度。相反,它将以编码方式将文本分成块。每个块块由头部和身体两部分组成。在头中,文本的长度由16位数字指定。最后,使用0长度的块块表示整个HTTP文本的结尾。
接下来,我使用PHP实现内容长度的方式。
1。获取内容长度值
复制代码代码如下所示:
$长度= 0;
$行=;
而($线)!= ){
$线= fgets($ FP);
如果(substr($,0, 15)= = = 'content-length:'){
$长度= intval(substr($,16));
}
}
2。获取文本
复制代码代码如下所示:
美元= 0;
当($和$ $长度){
$线= fgets($ FP);
美元金额= strlen($线);
回波$线;
}