If we want to make a useful script, we should make it work with a popular protocol, such as HTTP. This way we don't have to worry about potential client application, we may use an ordinary web browser to test our script. More formal information about the HTTP protocol can be found in RFC2616.
So a bash script that generates a simple HTTP response and serves a text file may look like this:
if [ -z "$1" ] then echo "Usage: $0 <text file to serve>" exit 1 fi filename=$1 echo " HTTP/1.1 200 OK Date: $(LANG=en_US date -u) Server: NetCatFileServe Last-Modified: $(LANG=en_US date -u) Accept-Ranges: bytes Content-Length: $(cat $filename | wc -c | cut -d " " -f 1) Content-Type: application/force-download Content-Disposition: attachment; filename=\"$filename\" $(cat $filename) "
If a HTTP client receives such a response, it should try to save the attached data as a file (a typical save-file-as window in a web browser).
Since we have a HTTP response generate, we need to create a server that will serve it - that's where netcat comes in handy. To serve some data we need to run it in the listening mode. For example :
~ $ ./ncserve.sh test.txt | nc -l 8888
If you now enter http://127.0.0.1:8888 (or your other IP) in a webbrowser, you should be able to download text.txt file. You may also test it using curl:
~ $ curl -X GET 127.0.0.1:8888
HTTP/1.1 200 OK
Date: Sat Oct 13 10:40:27 UTC 2012
Server: NetCatFileServe
Last-Modified: Sat Oct 13 10:40:27 UTC 2012
Accept-Ranges: bytes
Content-Length: 71
Content-Type: application/force-download
Content-Disposition: attachment; filename="test.txt"
This is a simple text file
bla bla bla
downloaded via netcatserver
:-)
This script only serve a file once and dies, if you want it to act like a regular HTTP server you should run it in a infinite loop.
Cheers!
~KR
How would I for example POST this text file from the client to a server - in my case it's a node server where I would then parse the req.
ReplyDeleteYou should try using curl instead of netcat for such purposes:
Deletecurl -X POST -d @my_filename.txt http://host/resource