From d3de504a4cfaf1581969ecd5a996d380ed39251f Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sun, 12 Jun 2011 19:21:55 -0400 Subject: [PATCH] /ip --- docs/httpbin.1.md | 3 ++- httpbin/core.py | 44 +++++++++++++++++++++++++++++++++++++++----- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/docs/httpbin.1.md b/docs/httpbin.1.md index a251d74..b614a2b 100644 --- a/docs/httpbin.1.md +++ b/docs/httpbin.1.md @@ -4,7 +4,8 @@ httpbin(1): HTTP Client Testing Service ## SYNOPSIS `/` This page. -`/user-agent` Returns user-agent string. +`/ip` Returns Origin IP. +`/user-agent` Returns user-agent. `/headers` Returns header dict. `/get` Returns GET data. `/post` Returns POST data. diff --git a/httpbin/core.py b/httpbin/core.py index e8d1f3c..0a0d4c6 100644 --- a/httpbin/core.py +++ b/httpbin/core.py @@ -9,19 +9,36 @@ This module provides the core HttpBin experience. import json +from decorator import decorator from flask import Flask, request, render_template app = Flask(__name__) +@decorator +def json_resource(f, *args, **kwargs): + + _dict = f(*args, **kwargs) + + dump = json.dumps(_dict) + + r = app.make_response(dump) + r.headers['Content-Type'] = 'application/json' + + return r -def to_json(*args, **kwargs): - data = dict(*args, **kwargs) - return json.dumps(data) +def get_headers(): + """Returns headers dictionary.""" + headers = dict() + + for k, v in request.headers.items(): + headers[k] = v + + return headers # ------ # Routes @@ -30,20 +47,37 @@ def to_json(*args, **kwargs): @app.route('/') def view_landing_page(): + """Generates Landing Page.""" return render_template('httpbin.1.html') +@app.route('/ip') +@json_resource +def view_origin(): + """Returns Origin IP.""" + + return dict(ip=request.remote_addr) + + @app.route('/headers') +@json_resource def view_headers(): - return to_json(headers='headers') + """Returns HTTP HEADERS.""" + + return dict(headers=get_headers()) + @app.route('/user-agent') +@json_resource def view_user_agent(): - return 'user agent' + """Returns User-Agent.""" + + return dict(useragent=request.headers.get('User-Agent', None)) @app.route('/get') +@json_resource def view_get(): return 'get'