diff --git a/README.md b/README.md deleted file mode 100644 index 457188d..0000000 --- a/README.md +++ /dev/null @@ -1,155 +0,0 @@ -httpbin(1): HTTP Request & Response Service -=========================================== - -Freely hosted in [HTTP](http://httpbin.org), [HTTPS](https://httpbin.org) & [EU](http://eu.httpbin.org/) flavors by [Runscope](https://www.runscope.com/) - -[![Build -Status](https://travis-ci.org/Runscope/httpbin.svg)](https://travis-ci.org/Runscope/httpbin) - -[![Deploy to Heroku](https://camo.githubusercontent.com/c0824806f5221ebb7d25e559568582dd39dd1170/68747470733a2f2f7777772e6865726f6b7563646e2e636f6d2f6465706c6f792f627574746f6e2e706e67)](https://heroku.com/deploy?template=https://github.com/Runscope/httpbin) - -## ENDPOINTS - -- [`/`](http://httpbin.org/) This page. -- [`/ip`](http://httpbin.org/ip) Returns Origin IP. -- [`/user-agent`](http://httpbin.org/user-agent) Returns user-agent. -- [`/headers`](http://httpbin.org/headers) Returns header dict. -- [`/get`](http://httpbin.org/get) Returns GET data. -- `/post` Returns POST data. -- `/patch` Returns PATCH data. -- `/put` Returns PUT data. -- `/delete` Returns DELETE data -- [`/gzip`](http://httpbin.org/gzip) Returns gzip-encoded data. -- [`/deflate`](http://httpbin.org/deflate) Returns deflate-encoded data. -- [`/status/:code`](http://httpbin.org/status/418) Returns given HTTP Status code. -- [`/response-headers?key=val`](http://httpbin.org/response-headers?Content-Type=text/plain;%20charset=UTF-8&Server=httpbin) Returns given response headers. -- [`/redirect/:n`](http://httpbin.org/redirect/6) 302 Redirects *n* times. -- [`/redirect-to?url=foo`](http://httpbin.org/redirect-to?url=http://example.com/) 302 Redirects to the *foo* URL. -- [`/relative-redirect/:n`](http://httpbin.org/relative-redirect/6) 302 Relative redirects *n* times. -- [`/cookies`](http://httpbin.org/cookies) Returns cookie data. -- [`/cookies/set?name=value`](http://httpbin.org/cookies/set?k1=v1&k2=v2) Sets one or more simple cookies. -- [`/cookies/delete?name`](http://httpbin.org/cookies/delete?k1&k2) Deletes one or more simple cookies. -- [`/basic-auth/:user/:passwd`](http://httpbin.org/basic-auth/user/passwd) Challenges HTTPBasic Auth. -- [`/hidden-basic-auth/:user/:passwd`](http://httpbin.org/hidden-basic-auth/user/passwd) 404'd BasicAuth. -- [`/digest-auth/:qop/:user/:passwd`](http://httpbin.org/digest-auth/auth/user/passwd) Challenges HTTP Digest Auth. -- [`/stream/:n`](http://httpbin.org/stream/20) Streams *n*–100 lines. -- [`/delay/:n`](http://httpbin.org/delay/3) Delays responding for *n*–10 seconds. -- [`/drip?numbytes=n&duration=s&delay=s&code=code`](http://httpbin.org/drip?numbytes=5&duration=5&code=200) Drips data over a duration after an optional initial delay, then (optionally) returns with the given status code. -- [`/html`](http://httpbin.org/html) Renders an HTML Page. -- [`/robots.txt`](http://httpbin.org/robots.txt) Returns some robots.txt rules. -- [`/deny`](http://httpbin.org/deny) Denied by robots.txt file. -- [`/cache`](http://httpbin.org/cache) Returns 200 unless an If-Modified-Since or If-None-Match header is provided, when it returns a 304. -- [`/cache/:n`](http://httpbin.org/cache/60) Sets a Cache-Control header for *n* seconds. -- [`/bytes/:n`](http://httpbin.org/bytes/1024) Generates *n* random bytes of binary data, accepts optional *seed* integer parameter. -- [`/stream-bytes/:n`](http://httpbin.org/stream-bytes/1024) Streams *n* random bytes of binary data, accepts optional *seed* and *chunk_size* integer parameters. -- [`/links/:n`](http://httpbin.org/links/10) Returns page containing *n* HTML links. -- [`/forms/post`](http://httpbin.org/forms/post) HTML form that submits to */post* -- [`/xml`](http://httpbin.org/xml) Returns some XML - -## DESCRIPTION - -Testing an HTTP Library can become difficult sometimes. [RequestBin](http://requestb.in) is fantastic -for testing POST requests, but doesn't let you control the response. This exists to cover all kinds of HTTP -scenarios. Additional endpoints are being considered. - -All endpoint responses are JSON-encoded. - - -## EXAMPLES - -### $ curl http://httpbin.org/ip - - {"origin": "24.127.96.129"} - -### $ curl http://httpbin.org/user-agent - - {"user-agent": "curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3"} - -### $ curl http://httpbin.org/get - - { - "args": {}, - "headers": { - "Accept": "*/*", - "Connection": "close", - "Content-Length": "", - "Content-Type": "", - "Host": "httpbin.org", - "User-Agent": "curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3" - }, - "origin": "24.127.96.129", - "url": "http://httpbin.org/get" - } - -### $ curl -I http://httpbin.org/status/418 - - HTTP/1.1 418 I'M A TEAPOT - Server: nginx/0.7.67 - Date: Mon, 13 Jun 2011 04:25:38 GMT - Connection: close - x-more-info: http://tools.ietf.org/html/rfc2324 - Content-Length: 135 - - -### $ curl https://httpbin.org/get?show_env=1 - - { - "headers": { - "Content-Length": "", - "Accept-Language": "en-US,en;q=0.8", - "Accept-Encoding": "gzip,deflate,sdch", - "X-Forwarded-Port": "443", - "X-Forwarded-For": "109.60.101.240", - "X-Heroku-Dynos-In-Use": "1", - "Host": "httpbin.org", - "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", - "User-Agent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11", - "X-Request-Start": "1350053933441", - "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", - "Connection": "keep-alive", - "X-Forwarded-Proto": "https", - "Cookie": "_gauges_unique_day=1; _gauges_unique_month=1; _gauges_unique_year=1; _gauges_unique=1; _gauges_unique_hour=1", - "X-Heroku-Queue-Depth": "0", - "X-Heroku-Queue-Wait-Time": "11", - "Content-Type": "" - }, - "args": { - "show_env": "1" - }, - "origin": "109.60.101.240", - "url": "http://httpbin.org/get?show_env=1" - } - -## Installing and running from PyPI - -You can install httpbin as a library from PyPI and run it as a WSGI app. For example, using Gunicorn: - -```bash -$ pip install httpbin -$ gunicorn httpbin:app -``` - -Or run it directly: - -```bash -$ python -m httpbin.core -``` - -## Changelog - -* 0.2.0: Added an XML endpoint. Also fixes several bugs with unicode, CORS headers, digest auth, and more. -* 0.1.2: Fix a couple Python3 bugs with the random byte endpoints, fix a bug when uploading files without a Content-Type header set. -* 0.1.1: Added templates as data in setup.py -* 0.1.0: Added python3 support and (re)publish on PyPI - -## AUTHOR - -A [Runscope Community Project](https://www.runscope.com/community). -Originally created by [Kenneth Reitz](http://kennethreitz.com/). - -## SEE ALSO - - - - - diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..9ced473 --- /dev/null +++ b/README.rst @@ -0,0 +1,208 @@ +httpbin(1): HTTP Request & Response Service +=========================================== + +Freely hosted in `HTTP `__, +`HTTPS `__ & `EU `__ +flavors by `Runscope `__ + +|Build Status| + +|Deploy to Heroku| + +ENDPOINTS +--------- + +- ```/`` `__ This page. +- ```/ip`` `__ Returns Origin IP. +- ```/user-agent`` `__ Returns + user-agent. +- ```/headers`` `__ Returns header dict. +- ```/get`` `__ Returns GET data. +- ``/post`` Returns POST data. +- ``/patch`` Returns PATCH data. +- ``/put`` Returns PUT data. +- ``/delete`` Returns DELETE data +- ```/gzip`` `__ Returns gzip-encoded data. +- ```/deflate`` `__ Returns deflate-encoded + data. +- ```/status/:code`` `__ Returns given + HTTP Status code. +- ```/response-headers?key=val`` `__ + Returns given response headers. +- ```/redirect/:n`` `__ 302 Redirects + *n* times. +- ```/redirect-to?url=foo`` `__ + 302 Redirects to the *foo* URL. +- ```/relative-redirect/:n`` `__ + 302 Relative redirects *n* times. +- ```/cookies`` `__ Returns cookie data. +- ```/cookies/set?name=value`` `__ + Sets one or more simple cookies. +- ```/cookies/delete?name`` `__ + Deletes one or more simple cookies. +- ```/basic-auth/:user/:passwd`` `__ + Challenges HTTPBasic Auth. +- ```/hidden-basic-auth/:user/:passwd`` `__ + 404'd BasicAuth. +- ```/digest-auth/:qop/:user/:passwd`` `__ + Challenges HTTP Digest Auth. +- ```/stream/:n`` `__ Streams *n*–100 + lines. +- ```/delay/:n`` `__ Delays responding for + *n*–10 seconds. +- ```/drip?numbytes=n&duration=s&delay=s&code=code`` `__ + Drips data over a duration after an optional initial delay, then + (optionally) returns with the given status code. +- ```/html`` `__ Renders an HTML Page. +- ```/robots.txt`` `__ Returns some + robots.txt rules. +- ```/deny`` `__ Denied by robots.txt file. +- ```/cache`` `__ Returns 200 unless an + If-Modified-Since or If-None-Match header is provided, when it + returns a 304. +- ```/cache/:n`` `__ Sets a Cache-Control + header for *n* seconds. +- ```/bytes/:n`` `__ Generates *n* + random bytes of binary data, accepts optional *seed* integer + parameter. +- ```/stream-bytes/:n`` `__ + Streams *n* random bytes of binary data, accepts optional *seed* and + *chunk\_size* integer parameters. +- ```/links/:n`` `__ Returns page + containing *n* HTML links. +- ```/forms/post`` `__ HTML form that + submits to */post* +- ```/xml`` `__ Returns some XML + +DESCRIPTION +----------- + +Testing an HTTP Library can become difficult sometimes. +`RequestBin `__ is fantastic for testing POST +requests, but doesn't let you control the response. This exists to cover +all kinds of HTTP scenarios. Additional endpoints are being considered. + +All endpoint responses are JSON-encoded. + +EXAMPLES +-------- + +$ curl http://httpbin.org/ip +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + {"origin": "24.127.96.129"} + +$ curl http://httpbin.org/user-agent +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + {"user-agent": "curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3"} + +$ curl http://httpbin.org/get +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + { + "args": {}, + "headers": { + "Accept": "*/*", + "Connection": "close", + "Content-Length": "", + "Content-Type": "", + "Host": "httpbin.org", + "User-Agent": "curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3" + }, + "origin": "24.127.96.129", + "url": "http://httpbin.org/get" + } + +$ curl -I http://httpbin.org/status/418 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + HTTP/1.1 418 I'M A TEAPOT + Server: nginx/0.7.67 + Date: Mon, 13 Jun 2011 04:25:38 GMT + Connection: close + x-more-info: http://tools.ietf.org/html/rfc2324 + Content-Length: 135 + +$ curl https://httpbin.org/get?show\_env=1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + { + "headers": { + "Content-Length": "", + "Accept-Language": "en-US,en;q=0.8", + "Accept-Encoding": "gzip,deflate,sdch", + "X-Forwarded-Port": "443", + "X-Forwarded-For": "109.60.101.240", + "X-Heroku-Dynos-In-Use": "1", + "Host": "httpbin.org", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "User-Agent": "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11", + "X-Request-Start": "1350053933441", + "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.3", + "Connection": "keep-alive", + "X-Forwarded-Proto": "https", + "Cookie": "_gauges_unique_day=1; _gauges_unique_month=1; _gauges_unique_year=1; _gauges_unique=1; _gauges_unique_hour=1", + "X-Heroku-Queue-Depth": "0", + "X-Heroku-Queue-Wait-Time": "11", + "Content-Type": "" + }, + "args": { + "show_env": "1" + }, + "origin": "109.60.101.240", + "url": "http://httpbin.org/get?show_env=1" + } + +Installing and running from PyPI +-------------------------------- + +You can install httpbin as a library from PyPI and run it as a WSGI app. +For example, using Gunicorn: + +.. code:: bash + + $ pip install httpbin + $ gunicorn httpbin:app + +Or run it directly: + +.. code:: bash + + $ python -m httpbin.core + +Changelog +--------- + +- 0.2.0: Added an XML endpoint. Also fixes several bugs with unicode, + CORS headers, digest auth, and more. +- 0.1.2: Fix a couple Python3 bugs with the random byte endpoints, fix + a bug when uploading files without a Content-Type header set. +- 0.1.1: Added templates as data in setup.py +- 0.1.0: Added python3 support and (re)publish on PyPI + +AUTHOR +------ + +A `Runscope Community Project `__. +Originally created by `Kenneth Reitz `__. + +SEE ALSO +-------- + +https://hurl.it http://requestb.in http://python-requests.org + +.. |Build Status| image:: https://travis-ci.org/Runscope/httpbin.svg + :target: https://travis-ci.org/Runscope/httpbin +.. |Deploy to Heroku| image:: https://camo.githubusercontent.com/c0824806f5221ebb7d25e559568582dd39dd1170/68747470733a2f2f7777772e6865726f6b7563646e2e636f6d2f6465706c6f792f627574746f6e2e706e67 + :target: https://heroku.com/deploy?template=https://github.com/Runscope/httpbin diff --git a/setup.py b/setup.py index f3672ce..a724f05 100644 --- a/setup.py +++ b/setup.py @@ -3,10 +3,14 @@ import codecs import os import re +long_description = open( + os.path.join(os.path.dirname(__file__), 'README.rst')).read() + setup( name="httpbin", version="0.2.0", description="HTTP Request and Response Service", + long_description=long_description, # The project URL. url='https://github.com/Runscope/httpbin',