请求处理程序(Handler)
 
                  更新时间 2025-10-16 09:28:36
                 
 
                    最近更新时间: 2025-10-16 09:28:36
                  
 本文介绍如何使用Python请求处理程序响应接收到的事件并执行相应的业务逻辑。
请求处理程序
请求处理程序是您提供的一个方法。当您的函数被调用时,函数计算会运行该方法处理请求。
您可以通过函数计算控制台页面配置请求处理程序,对于Python语言的函数,请求处理程序需配置为 [文件名].[方法名]。例如,您的文件名为index.py,方法名为handler,则请求处理程序可配置为 index.handler。
事件请求处理程序的方法签名定义如下:
def handler(event, context):
    return 'Hello Python!'
- 方法名
 您可以自定义方法名称。
- event入参
 您调用函数时传入的参数。
- context入参
 context参数中包含一些函数的运行时信息(例如RequestId、临时AccessKey等)。
HTTP请求处理程序的方法签名定义如下:
# -*- coding: utf-8 -*-
HELLO_WORLD = b'Hello world!\n'
def handler(environ, start_response):
    status = '200 OK'
    response_headers = [('Content-type', 'text/plain')]
    start_response(status, response_headers)
    return [HELLO_WORLD]
- 方法名
 您可以自定义方法名称。
- environ入参
 用于存放所有HTTP请求的信息。
- start_response入参
 发送 HTTP 响应的函数,包含两个参数:HTTP状态码、一组Python list对象组成的HTTP Headers。
示例:获取JSON中的字段
# -*- coding: utf-8 -*-
import json
def handler(event, context):
    person = json.loads(event)
    
    name = person["name"]
    address = person["address"]
    
    return f"Input name is: {name}, address is: {address}"
示例二:使用HTTP触发器调用函数
import json
import logging
# 配置日志
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def handler(environ, start_response):
    # 获取请求路径、URI和客户端IP
    request_path = environ.get('FC_REQUEST_PATH', '')
    request_uri = environ.get('FC_REQUEST_URI', '')
    request_client_ip = environ.get('FC_REQUEST_CLIENT_IP', '')
  
    # 记录日志
    logger.info("hello")
    print("print hello")
  
    # 获取请求体数据
    try:
        # 读取请求体
        request_body_size = int(environ.get('CONTENT_LENGTH', 0))
    except (ValueError):
        request_body_size = 0
    
    request_body = environ['wsgi.input'].read(request_body_size)
  
    # 解析JSON请求体
    try:
        if request_body:
            json_data = json.loads(request_body.decode('utf-8'))
            logger.info(f"body: {json.dumps(json_data)}")
        else:
            json_data = {}
            logger.info("body: empty")
    except json.JSONDecodeError as e:
        logger.error(f"JSON解析错误: {e}")
        json_data = {}
  
    # 构建响应内容
    response_content = f"Path: {request_path}\nUri: {request_uri}\nIP: {request_client_ip}\n"
  
    # 设置响应状态和头部
    status = '200 OK'
    response_headers = [
        ('header1', 'value1'),
        ('header2', 'value2'),
        ('Content-Type', 'text/plain')
    ]
    start_response(status, response_headers)
  
    # 返回响应内容
    return [response_content.encode('utf-8')]
