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') """

浙公网安备 33010602011771号