Skip to content

Instantly share code, notes, and snippets.

@lastguest
Created December 21, 2017 16:42
Show Gist options
  • Save lastguest/a13201b69a2dff3d3253567c1e29a46c to your computer and use it in GitHub Desktop.
Save lastguest/a13201b69a2dff3d3253567c1e29a46c to your computer and use it in GitHub Desktop.
[BASH] HTTP Server Responder
#!/bin/bash
SERVER_PORT="${1:-8080}"
function handleRequest(){
# $METHOD = GET|POST
# $FULL_REQUEST = /query/url/complete?with=params
# $REQUEST = /query/url/complete
# render query parameters as QUERY_* environment variables
for p in ${QUERY//&/ };do kvp=( ${p/=/ } ); k=${kvp[0]};v=${kvp[1]};eval "QUERY_$k"=$v;done
# Here you can implement your application logic :
echo "<pre>METHOD : $METHOD<br>REQUEST : $REQUEST<br>QUERY : $QUERY<br></pre>"
echo "<h1>$QUERY_alla</h1>"
# or delegate to other external script :
# source myscript.sh
}
echo "Starting server on http://localhost:$SERVER_PORT"
rm -f serv_out_pipe
mkfifo serv_out_pipe
trap "rm -f serv_out_pipe" EXIT
while true
do
cat serv_out_pipe | nc -l "$SERVER_PORT" > >(
export FULL_REQUEST=
export REQUEST=
export METHOD=
export QUERY=
while read -r line
do
line=$(echo "$line" | tr -d '\r\n')
if echo "$line" | grep -qE "^(GET|POST|PUT|DELETE|PATCH)"
then
METHOD=$(echo "$line" | cut -d ' ' -f1)
FULL_REQUEST=$(echo "$line" | cut -d ' ' -f2)
REQUEST=$(echo "$FULL_REQUEST" | cut -d '?' -f1)
if [[ $FULL_REQUEST =~ [?] ]]; then
QUERY=$(echo "$FULL_REQUEST" | cut -d '?' -f2)
else
QUERY=
fi
echo ">>> $(date) | $METHOD $REQUEST $QUERY"
# always responding 200 OK for now...
echo -e "HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nContent-Type: text/html\r\n\r\n$(handleRequest)" > serv_out_pipe
fi
done
)
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment