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()