介紹
HTTP庫的測試一般來說較為繁瑣,一些同學(xué)較為熟悉的RequestBin雖然好用罗丰,但只能測試POST神帅,且無法控制其response。HTTPBin是以Python+Flask寫的一款工具萌抵,它c(diǎn)over了各類的HTTP場景找御,且每個(gè)接口一定都有返回。
安裝方法
使用pip工具分別安裝httpbin與guicorn绍填,guicorn是一個(gè)wsgi http服務(wù)器霎桅,詳見guicorn 是什么。
#安裝pip工具
[root@localhost ~]# wget https://bootstrap.pypa.io/get-pip.py
[root@localhost ~]# python get-pip.py
#分別使用pip工具安裝guicorn與httpbin
[root@localhost ~]# pip install httpbin
[root@localhost ~]# pip install guicorn
#啟動(dòng)httpbin
[root@localhost ~]# gunicorn -b :8000 httpbin:app
[2017-07-11 16:25:29 +0000] [21088] [INFO] Starting gunicorn 19.7.1
[2017-07-11 16:25:29 +0000] [21088] [INFO] Listening at: http://0.0.0.0:8000 (21088)
[2017-07-11 16:25:29 +0000] [21088] [INFO] Using worker: sync
[2017-07-11 16:25:29 +0000] [21093] [INFO] Booting worker with pid: 21093
#訪問httpbin主頁面
[root@localhost ~]# lynx localhost:8000
image
接口列表
Endpoint | Descirption |
---|---|
/ | 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 | 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 | Drips data over a duration after an optional initial delay, then (optionally) returns with the given status code. |
/range/:n | Streams n bytes, and allows specifying a Range header to select a subset of the data. Accepts a chunk_size and request duration parameter. |
/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 |
/encoding/utf8 | Returns page containing UTF-8 data. |
例子
[root@localhost ~]# curl http://httpbin.org/ip
{
"origin": "218.189.127.78"
}
[root@localhost ~]# curl http://httpbin.org/user-agent
{
"user-agent": "curl/7.29.0"
}
[root@localhost ~]# curl https://httpbin.org/get?show_env=1
{
"args": {
"show_env": "1"
},
"headers": {
"Accept": "*/*",
"Connect-Time": "0",
"Connection": "close",
"Host": "httpbin.org",
"Total-Route-Time": "0",
"User-Agent": "curl/7.29.0",
"Via": "1.1 vegur",
"X-Forwarded-For": "218.189.127.78",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https",
"X-Request-Id": "392e0fda-5f1b-4cc8-8131-77967bfee9db",
"X-Request-Start": "1499761771703"
},
"origin": "218.189.127.78",
"url": "https://httpbin.org/get?show_env=1"
}
[root@localhost ~]# curl -I http://httpbin.org/status/418
HTTP/1.1 418 I'M A TEAPOT
Connection: keep-alive
Server: meinheld/0.6.1
Date: Tue, 11 Jul 2017 08:29:40 GMT
X-Processed-Time: 0.000515937805176
Access-Control-Allow-Origin: *
X-More-Info: http://tools.ietf.org/html/rfc2324
Access-Control-Allow-Credentials: true
X-Powered-By: Flask
Content-Length: 135
Via: 1.1 vegur
[root@localhost ~]# curl http://httpbin.org/get
{
"args": {},
"headers": {
"Accept": "*/*",
"Connection": "close",
"Host": "httpbin.org",
"User-Agent": "curl/7.29.0"
},
"origin": "218.189.127.78",
"url": "http://httpbin.org/get"
}