部署请求代理

在网络环境复杂时,默认视频点播域名(*.aliyuncs.com)可能被运营商劫持,导致访问失败。建议部署专属代理服务以提升请求成功率和稳定性。

部署前须知

本文以阿里云函数计算(FC)3.0为例进行部署,在部署前请先了解函数计算计费

部署步骤

部署步骤如下:

说明

若阿里云函数计算(FC)控制台显示如下样式,请点击右上角体验函数计算3.0进入新版控制台。

image

步骤一:创建函数

  1. 进入函数计算(FC)控制台函数页面,点击创建函数image

  2. 进入创建函数页,选择任务函数。其中:

    • 弹性配置:建议选择极速模式,防止冷启动问题造成首次请求失败。

    • 运行环境:建议选择内置运行>Python

    • 其他参数保持默认或根据您的实际需求进行更改。image

  3. 确认配置无误后,点击创建

步骤二:部署代码

  1. 函数详情页,点击代码标签,进入代码编辑页。image

  2. 将如下代码拷贝至编辑框内。

    示例代码

    import json
    import logging
    import http.client
    from urllib.parse import urlencode
    
    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger()
    
    def get_target_domain(region_id):
        # 如果没有指定 region_id,使用默认值
        if not region_id:
            return "vod.cn-shanghai.aliyuncs.com"
        return f"vod.{region_id}.aliyuncs.com"
    
    def handler(event, context):
        try:
            # 如果是 bytes,先解码
            if isinstance(event, bytes):
                event = json.loads(event.decode('utf-8'))
    
            # 获取 queryParameters
            query_params = event['queryParameters']
            logger.info(f"queryParameters: {query_params}")
    
            # 获取并移除 regionId 参数
            region_id = query_params.pop('RegionId', None)
            target_domain = get_target_domain(region_id)
    
            # 构建查询字符串
            query_string = urlencode(query_params)
            path = f"/?{query_string}"
    
            logger.info(f"Forwarding to: {target_domain}{path}")
    
            # 转发请求
            conn = http.client.HTTPSConnection(target_domain)
            conn.request('GET', path)
    
            # 获取响应
            response = conn.getresponse()
            body = response.read()
    
            # 处理响应头,确保只有一个 Access-Control-Allow-Origin
            headers = dict(response.getheaders())
            # 设置单个 CORS 头
            headers['Access-Control-Allow-Origin'] = '*'
    
            return {
                'statusCode': response.status,
                'headers': headers,
                'body': body.decode('utf-8')
            }
    
        except Exception as e:
            logger.error(f"Error: {str(e)}")
            return {
                'statusCode': 500,
                'body': str(e)
            }
        finally:
            if 'conn' in locals():
                conn.close()
  3. 点击部署代码

步骤三:创建触发器

  1. 函数详情页,点击触发器标签。image

  2. 点击创建触发器,进入编辑页,选择HTTP触发器。其中,认证方式建议选择无需认证,其他参数保持默认或根据您的实际需求进行更改。image

  3. 确认配置无误后,点击确定

步骤四:验证部署

  1. 在播放器端将customVodServer属性设置为生成的域名地址(公网访问地址)访问代理服务,测试连通性。image

  2. 访问成功,证明请求代理部署完成。

相关文档