【问题标题】:How do you throw an HTTP error with mod_python如何使用 mod_python 引发 HTTP 错误
【发布时间】:2010-03-26 01:36:45
【问题描述】:

我有一个设置,我使用 mod_python 发布者提供简单的 python 页面。在某些时候,我想让 python 函数引发标准的 apache 错误——例如,如果缺少所需的文件,则抛出 500 错误。如何从 mod_python 脚本中抛出 apache 错误?

【问题讨论】:

    标签: python apache mod-python http-error


    【解决方案1】:

    我不是python专家,但来自this documentation,看来你可以做到:

    raise apache.SERVER_RETURN, apache.HTTP_INTERNAL_SERVER_ERROR
    

    如果链接失效,这是文档的引用:

    处理函数将始终传递对请求的引用 目的。 (在本手册中,请求对象经常被提及 到 req 变量。)

    每个处理程序都可以返回:

    apache.OK,表示这个阶段的请求是由这个处理的 处理程序,没有发生错误。

    apache.DECLINED,意味着这个处理程序没有处理这个阶段 请求完成,Apache 需要寻找另一个处理程序 在后续模块中。

    apache.HTTP_ERROR,表示发生了 HTTP 错误。 HTTP_ERROR 可以是 以下任何一项:

    HTTP_CONTINUE                     = 100
    HTTP_SWITCHING_PROTOCOLS          = 101
    HTTP_PROCESSING                   = 102
    HTTP_OK                           = 200
    HTTP_CREATED                      = 201
    HTTP_ACCEPTED                     = 202
    HTTP_NON_AUTHORITATIVE            = 203
    HTTP_NO_CONTENT                   = 204
    HTTP_RESET_CONTENT                = 205
    HTTP_PARTIAL_CONTENT              = 206
    HTTP_MULTI_STATUS                 = 207
    HTTP_MULTIPLE_CHOICES             = 300
    HTTP_MOVED_PERMANENTLY            = 301
    HTTP_MOVED_TEMPORARILY            = 302
    HTTP_SEE_OTHER                    = 303
    HTTP_NOT_MODIFIED                 = 304
    HTTP_USE_PROXY                    = 305
    HTTP_TEMPORARY_REDIRECT           = 307
    HTTP_BAD_REQUEST                  = 400
    HTTP_UNAUTHORIZED                 = 401
    HTTP_PAYMENT_REQUIRED             = 402
    HTTP_FORBIDDEN                    = 403
    HTTP_NOT_FOUND                    = 404
    HTTP_METHOD_NOT_ALLOWED           = 405
    HTTP_NOT_ACCEPTABLE               = 406
    HTTP_PROXY_AUTHENTICATION_REQUIRED= 407
    HTTP_REQUEST_TIME_OUT             = 408
    HTTP_CONFLICT                     = 409
    HTTP_GONE                         = 410
    HTTP_LENGTH_REQUIRED              = 411
    HTTP_PRECONDITION_FAILED          = 412
    HTTP_REQUEST_ENTITY_TOO_LARGE     = 413
    HTTP_REQUEST_URI_TOO_LARGE        = 414
    HTTP_UNSUPPORTED_MEDIA_TYPE       = 415
    HTTP_RANGE_NOT_SATISFIABLE        = 416
    HTTP_EXPECTATION_FAILED           = 417
    HTTP_UNPROCESSABLE_ENTITY         = 422
    HTTP_LOCKED                       = 423
    HTTP_FAILED_DEPENDENCY            = 424
    HTTP_INTERNAL_SERVER_ERROR        = 500
    HTTP_NOT_IMPLEMENTED              = 501
    HTTP_BAD_GATEWAY                  = 502
    HTTP_SERVICE_UNAVAILABLE          = 503
    HTTP_GATEWAY_TIME_OUT             = 504
    HTTP_VERSION_NOT_SUPPORTED        = 505
    HTTP_VARIANT_ALSO_VARIES          = 506
    HTTP_INSUFFICIENT_STORAGE         = 507
    HTTP_NOT_EXTENDED                 = 510
    

    作为返回 HTTP 错误代码的替代方法,处理程序可以发出信号 通过引发 apache.SERVER_RETURN 异常并提供错误 HTTP 错误代码作为异常值,例如:

    raise apache.SERVER_RETURN, apache.HTTP_FORBIDDEN
    

    【讨论】:

    【解决方案2】:

    我相信是:

    def my_action(req):
      # all the status code constants are defined in the apache module 
      req.status = apache.HTTP_INTERNAL_SERVER_ERROR 
      req.content_type = some_mime_type
      req.write(content)
      raise apache.HTTP_SERVER_RETURN, apache.DONE
    

    提高 apache.DONE 告诉 Apache 不要写出自己的错误页面。

    【讨论】:

      猜你喜欢
      • 2012-08-17
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 2015-06-25
      • 2020-06-27
      • 1970-01-01
      相关资源
      最近更新 更多