Flask代理服务器实现

代码如下

# -*- coding: utf-8 -*-
from contextlib import closing
import requests
from flask import Flask, request, Response

app = Flask(__name__)


@app.before_request
def before_request():
    url = request.url
    method = request.method
    data = request.data or request.form or None
    headers = dict()
    for name, value in request.headers:
        if not value or name == 'Cache-Control':
            continue
        headers[name] = value

    with closing(
        requests.request(method, url, headers=headers, data=data, stream=True)
    ) as r:
        resp_headers = []
        for name, value in r.headers.items():
            if name.lower() in ('content-length', 'connection',
                                'content-encoding'):
                continue
            resp_headers.append((name, value))
        return Response(r, status=r.status_code, headers=resp_headers)

app.run(port=8007, debug=True)

 

 

 

 

来源 简书

# -*- coding: utf-8 -*-
from contextlib import closing
import logging
import requests
from flask import Flask, request, Response
import time

app = Flask(__name__)


@app.before_request
def before_request():
    url = request.url
    method = request.method
    data = request.data or request.form or None

    print(time.strftime("%b %d %Y %H:%M:%S"))

    ############## For Debug HTTP #################
   
    # 启用调试于 http.client 级别 (requests->urllib3->http.client)
    # 你将能看到 REQUEST,包括 HEADERS 和 DATA,以及包含 HEADERS 但不包含 DATA 的 RESPONSE。
    # 唯一缺少的是 response.body,它不会被 log 记录。

    try:  # for Python 3
        from http.client import HTTPConnection
    except ImportError:
        from httplib import HTTPConnection
    HTTPConnection.debuglevel = 1

    logging.basicConfig()  # 初始化 logging,否则不会看到任何 requests 的输出。
    logging.getLogger().setLevel(logging.DEBUG)
    requests_log = logging.getLogger("requests.packages.urllib3")
    requests_log.setLevel(logging.DEBUG)
    requests_log.propagate = True


    headers = dict()
    for name, value in request.headers:
        if not value or name == 'Cache-Control':
            continue
        headers[name] = value

    headers['token'] = 'eyJhbGciOiJIUzI1NiIsImV4cCI6NDA5OTAxNjY5OCwiaWF0IjoxNDgxNTI4Njk4fQ.eyJKTSI6IkpNX1RPS0VOIn0.mA_5Sqx-dkNvsGpCImQCZ6TYsXgRJ_u8icVpEEVKb84'
    print('\n============headers==================\n', headers, '\n', type(headers))

    with closing(
        requests.request(method, url, headers=headers, data=data, stream=True)
    ) as r:
        resp_headers = []
        for name, value in r.headers.items():
            if name.lower() in ('content-length', 'connection',
                                'content-encoding'):
                continue
            resp_headers.append((name, value))
        print('\n响应头\n')
        print(resp_headers, '\n')
        print('r', '\n', '\nxxxxxxxx  content\n',  r.content)
        print(r, type(r))
        print(time.strftime("%b %d %Y %H:%M:%S"))

        return Response(r, status=r.status_code, headers=resp_headers)

app.run(port=8007, debug=True)

"""
    # 启用调试于 http.client 级别 (requests->urllib3->http.client)
    # 你将能看到 REQUEST,包括 HEADERS 和 DATA,以及包含 HEADERS 但不包含 DATA 的 RESPONSE。
    # 唯一缺少的是 response.body,它不会被 log 记录。
    try:  # for Python 3
        from http.client import HTTPConnection
    except ImportError:
        from httplib import HTTPConnection
    HTTPConnection.debuglevel = 1

    logging.basicConfig()  # 初始化 logging,否则不会看到任何 requests 的输出。
    logging.getLogger().setLevel(logging.DEBUG)
    requests_log = logging.getLogger("requests.packages.urllib3")
    requests_log.setLevel(logging.DEBUG)
    requests_log.propagate = True

    requests.get('http://httpbin.org/headers')

"""
草稿版

 

posted @ 2016-12-09 16:23  hallo.world  阅读(1141)  评论(0)    收藏  举报