使用Flask创建反向代理将API请求转发至指定url

Qingsheng 随笔使用Flask创建反向代理将API请求转发至指定url已关闭评论11阅读模式
Excerpt

如何在腾讯云云函数服务中启用Flask框架模板,编辑代码实现简单的API请求代理功能。具体步骤包括启用云函数服务并设置触发器、在线编辑代码、部署和接口调试。最后提醒用户注意公网访问路径中可能带有“/release”需要去除后使用。

以腾讯云云函数服务为例:

第一步:启用云函数服务,新建一个函数服务:

使用Flask创建反向代理将API请求转发至指定url

选择“Flask 框架模版”,点击下一步:
使用Flask创建反向代理将API请求转发至指定url
在基础配置中设置函数名称,选择触发器配置为如图所示:
使用Flask创建反向代理将API请求转发至指定url
请求方法:any
发布环境:发布
鉴权方法:免鉴权
配置完成后点击完成,稍等函数配置完成:
使用Flask创建反向代理将API请求转发至指定url

第二步:编辑云代码:

在函数服务-函数管理-函数代码中在线编辑函数代码
(在线编辑器加载有点慢,需要稍等待一会儿…约3分钟…)
在线编辑器加载完毕后,在左侧文件列表中选择“app.py”文件,删除文件内全部内容
使用Flask创建反向代理将API请求转发至指定url
并将如下代码复制到“app.py”文件内:

import os                         # 导入系统OS模块
import requests                   # 导入请求处理Requests模块
from flask import Flask, jsonify, Response, render_template, request, url_for, send_from_directory  # 导入Flask框架相关模块
from werkzeug.utils import secure_filename  # 导入工具模块

app = Flask(__name__)   # 初始化Flask应用程序

target_url = "https://api.openai.com/" # 设置目标url

# 设置路由指向,处理所有请求方法
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'])
def proxy(path):
    # 处理请求头中的Host
    headers = {key: value for (key, value) in request.headers if key != 'Host'}

    # 发起请求到目标url,并返回响应
    resp = requests.request(
        method=request.method,         # 使用与客户端相同的HTTP动词
        url=target_url + path,         # 请求的URL目标路径
        headers=headers,               # 将去除 Host 的请求头添加到目标URL请求头中
        data=request.get_data(),       # 获取客户端数据并添加到请求对应位置中
        cookies=request.cookies,       # 获取客户端cookie信息
        allow_redirects=False,         # 是否重定向
        verify=False)                  # 跳过SSl证书验证,避免HTTP 403 Forbidden等403错误

    # 处理过滤掉不需要响应头部属性
    exclude_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
    headers = [(name, value) for (name, value) in resp.raw.headers.items() if name.lower() not in exclude_headers]

    # 返回请求响应
    response = Response(resp.content, resp.status_code, headers)
    return response

# 运行应用程序
app.run(port=9000, host='0.0.0.0')

粘贴完毕后,点击“部署”,等待部署完成(1~3分钟)

注意:首次部署未开通API网络,不会自动创建触发器,请在触发管理中开通相关服务,并手动创建触发器

接口调试

部署完成后,在“触发管理”中可以看到触发器的公网访问路径,
使用Flask创建反向代理将API请求转发至指定url
此网址可用于端口转发,可以使用 Postman / Apipost 等工具进行测试:
注意: 公网访问路径带有 /release 将其去除后可正常使用
使用Flask创建反向代理将API请求转发至指定url

文章末尾固定信息

weinxin
我的微信
微信扫一扫
Qingsheng
  • 本文由 Published on 2023年3月11日 19:50:43
  • 转载请务必保留本文链接:https://qingsheng.xyz/489.html