I have the following command:
echo 'HTTP/1.1 200 OK\r\n' | nc -l -p 8000 -c
and when I curl localhost:8000
I am not seeing HTTP/1.1 200 .. being printed.
I am on mac os x with netcat 0.7.1
Any ideas?
#!/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
and testing with:
curl localhost:8000
Best Answer
Your approach has multiple issues.
Escape sequences
The escape sequences are not honored unless you use the
-e
switch.Without
-e
, you are sending the backslashes and letters verbatim. The above forms a full HTTP status line.Protocol
The status line alone does not constitute a response. The format requires two CRLFs
Try this
netcat invocation
The
-c
flag is plain wrong, because it expects a command argument.Content
Even with that,
curl
will block after receiving the reply, because it's waiting for the server to supply a body. You could either send more data tonc
, or choose a more appropriate answer.Note that
curl
will print just what it receives - nothing. Trycurl -v
to get a glimpse of what's going on.