gpt4 book ai didi

PHP HTTP Header 结束(或检测 CR LF)

转载 作者:可可西里 更新时间:2023-11-01 16:34:43 26 4
gpt4 key购买 nike

出于测试目的,我想用 PHP 构建一个简单的 HTTP 服务器。我知道 HTTP header 由空行上的\r\n 终止,我想检测该模式,以便我知道我的服务器何时收到所有 header 并可以响应客户端。

即使我也像这样模拟客户端:

$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.example.com\r\n";
$in .= "Connection: Close\r\n\r\n";
$out = '';

echo "Sending HTTP HEAD request...";
socket_write($socket, $in, strlen($in));

我无法检测到 header 的结尾。一定是我的思维逻辑有问题。这是我尝试检测模式的代码:

do { 
// read client input
$input = socket_read($spawn, 1024, 1) or die("Could not read input\n");

if (preg_match ("/^[\r\n|\r|\n]/", $input)) {
echo "CRLF detected!!\n";
} else {
if (trim($input) != "") {
echo "NO CRLF in: ".trim($input)."\n";
}
}
} while (true);

我也试过:

if ($input == "\r\n"){ 

if (preg_match ("/[\r\n|\r|\n]{2,}/", $input))

和许多其他不同的组合,但似乎没有一个选项检测到指示标题结尾的\r\n 。非常感谢任何帮助。

最佳答案

不是答案,但对于评论来说太大/太丑了:

[\r\n|\r|\n] 并不是真正正确的语法。字符类 ([]) 匹配采用括号内的任何内容,并将它们用作搜索字符串中单个字符的潜在匹配项。 | 交替运算符在 [] 中的作用与在 () 中的作用不同。例如

/[abc]/ 读作“如果有任何单个字符是‘a’或‘b’或‘c’”,则它是一个匹配项。

/[a|b|c]/ 读起来几乎一样,除了它是“if it's an 'a' or 'b' or 'c' or '|'”。

(a|b|c)[abc] 是等效的,除了 () 版本也捕获匹配。

关于PHP HTTP Header 结束(或检测 CR LF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9810872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com