我有这个命令:
echo -e 'GET / HTTP/1.0\n\n' | ncat www.website.com 80
在命令行中完全正常。但是,它并不适用于php脚本:
<?php
$html = system("echo -e 'GET / HTTP/1.0\n\n' | ncat www.website.com 80");
print $html;
?>
不是返回正确的html,而是返回&#34;您的浏览器发送了服务器无法理解的请求&#34;错误。我该如何解决这个问题?
答案 0 :(得分:1)
你正在编写PHP,因此你的字符串中的\n
被PHP解析为实际的换行符:
$html = system("echo -e 'GET / HTTP/1.0\n\n' | ncat www.website.com 80");
^^^^^
以及最终发送给system()
启动的shell的内容如下:
echo -e 'GET / HTTP/1.0
'| ncat www.website.com 80
尝试
$html = system("echo -e 'GET / HTTP/1.0\\n\\n' | ncat www.website.com 80");
^--^---note these
代替。
答案 1 :(得分:0)
它应该是这样的:
<?php
$html = system("echo 'GET / HTTP/1.0\n\n' | ncat www.website.com 80");
print $html;
?>
我不得不从echo命令中删除-e。我检查了Wireshark上的数据包,发送的是这个:
-e GET / HTTP/1.0
去图......