我有以下命令:
echo 'HTTP/1.1 200 OK\r\n' | nc -l -p 8000 -c
当我curl localhost:8000我没有看到HTTP / 1.1 200 ..正在打印。
我使用netcat 0.7.1在mac os x上
有任何想法吗?
#!/bin/bash trap 'my_exit; exit' SIGINT SIGQUIT my_exit() { echo "you hit Ctrl-C/Ctrl-\, now exiting.." # cleanup commands here if any } if test $# -eq 0 ; then echo "Usage: $0 PORT" echo "" exit 1 fi while true do echo "HTTP/1.1 200 OK\r\n" | nc -l -p ${1} -c done
并testing:
curl localhost:8000
你的方法有多个问题。
除非使用-e开关,否则转义序列不受尊重。
echo -e 'HTTP/1.1 200 OK\r\n'
没有-e ,你是逐字地发送反斜杠和字母。 以上内容形成一个完整的HTTP状态行。
地位线本身并不构成回应。 格式需要两个CRLF
尝试这个
echo -e 'HTTP/1.1 200 OK\r\n\r\n'
-c标志是错误的,因为它需要一个命令参数。
echo -e 'HTTP/1.1 200 OK\r\n\r\n' | nc -l -p $port
即使这样, curl也会在收到回复后阻塞,因为它正在等待服务器提供一个body。 你可以发送更多的数据给nc ,或者select一个更合适的答案。
echo -e 'HTTP/1.1 204 No content\r\n\r\n' | nc -l -p $port
请注意, curl将打印它收到的东西 – 什么也没有。 试试curl -v来看看发生了什么。
我注意到你是单引号在你的echo语句中发送的string。 因此,\ r和\ n是逐字发送的,而不是Newline和Return的代码。 尝试将回声切换到双引号(“)。
您可以使用以下validation
echo 'whatever\r\n' | od -cb echo "better\r\n" | od -cb
没有线路terminal,NC程序可能不会将线路传输到目的地。
只是,
netcat -l -c "printf 'HTTP/1.1 200 OK\r\n'" -p 8000
printf将“\ r”和“\ n”解释为转义序列。 echo不。