Skip to content

k1nky/httparrot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 

Repository files navigation

HTTParrot is http echo server which can be used when debugging, configure or testing your infrastructure. The utility is built on native Python3 classes and does not need any dependencies.

Usage

httparrot.py [-h] [--port PORT] [--address ADDRESS]
                    [--echo [TYPE [TYPE ...]]]
                    [--header [HEADER [HEADER ...]]]
                    [--body [BODY [BODY ...]]] [--status STATUS]
                    [--version {1.0,1.1,2}] [--time] [--silent]

Arguments:

  • port - server listen port, default 8000
  • address - server address, default localhost
  • echo - echo message types (list): headers - include request headers, body - include request body, query - include request line, client - include client connection, all - include all, none - no include
  • header - response headers (list)
  • body - echo response body
  • version - HTTP version, default 1.1
  • time - insert current time into echo response body
  • silent - enable silent mode
  • status - response code status

Examples

  • $ ./httparrot.py -p 8010 -v 1.0
$ curl -v localhost:8010/test?q=1

> GET /test?q=1 HTTP/1.1
> Host: localhost:8010
> User-Agent: curl/7.52.1
> Accept: */*
> 
# -v 1.0
< HTTP/1.0 200 OK	
< Server: BaseHTTP/0.6 Python/3.5.3
< Date: Thu, 28 Nov 2019 19:07:59 GMT
< Content-Type: text/html
< 
  • $ ./httparrot.py -p 8010 --body OK --echo headers --echo query --header "Connection: keep-alive" "Content-Type: text/html" --time
$ curl -v localhost:8010/test?q=1

> GET /test?q=1 HTTP/1.1
> Host: localhost:8010
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: BaseHTTP/0.6 Python/3.5.3
< Date: Thu, 28 Nov 2019 19:07:59 GMT
# --header "Connection: keep-alive"
< Connection: keep-alive
# --header "Content-Type: text/html"
< Content-Type: text/html 
< Content-Length: 96
< 

# --echo headers
Host: localhost:8010
User-Agent: curl/7.52.1
Accept: */*

# --echo query
GET /test?q=1 HTTP/1.1
# --time
1574968079
# --body OK
OK

  • $ ./httparrot.py -s 301 --header "Location: http://example.com"
$ curl -L -v localhost:8000/any-query --silent

> GET /any-query HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.52.1
> Accept: */*
> 
# -s 301
< HTTP/1.1 301 Moved Permanently
< Server: BaseHTTP/0.6 Python/3.5.3
< Date: Sat, 07 Dec 2019 08:35:03 GMT
# --header "Location: http://example.com"
< Location: http://example.com
< Content-Length: 1
< 
...
* Issue another request to this URL: 'http://example.com'
* Rebuilt URL to: http://example.com/
*   Trying 93.184.216.34...
* TCP_NODELAY set
* Connected to example.com (93.184.216.34) port 80 (#1)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 200 OK
...