【问题标题】:I can read output data but not http header with using custom apache module我可以使用自定义 apache 模块读取输出数据,但不能读取 http 标头
【发布时间】:2015-03-23 19:21:25
【问题描述】:

我来这里是为了问,因为我在任何地方都找不到任何明确的文档,说明如何编写一个可以读取从执行的任何 3rd 方脚本(例如 PHP 脚本)传递的 HTTP 标头(尤其是状态代码)的模块从阿帕奇。到目前为止,我可以使用此代码获取 HTML 输出的内容并在 error_log 中记录下来:

static apr_status_t outfilter(ap_filter_t *f,apr_bucket_brigade *pbbIn){
    const char *data;
    apr_size_t len;
    apr_bucket *pbktIn=APR_BRIGADE_FIRST(pbbIn);
    apr_bucket_read(pbktIn,&data,&len,APR_BLOCK_READ);
    request_rec *r=f->r;server_rec *s=r->server;
    ap_log_error(APLOG_MARK, APLOG_CRIT, 0, s, "SAMPLE: DATA READ: %s",data);
    return ap_pass_brigade(f->next,pbbIn);
}

static int addfilt(request_rec *r){
ap_add_output_filter("block:filt",NULL,r,r->connection);
}

static void register_hooks(apr_pool_t *pool){
    ap_hook_insert_filter(addfilt,NULL,NULL,APR_HOOK_MIDDLE);
    ap_register_output_filter("block:filt",outfilter,NULL,AP_FTYPE_RESOURCE);
}

module AP_MODULE_DECLARE_DATA sample_module={
    STANDARD20_MODULE_STUFF,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    register_hooks
}

我想读取状态,因为我想阻止潜在的脚本小子不时以每秒 20 多个请求指向服务器上不存在的项目的请求淹没我的日志。

知道如何读取状态吗?甚至读取整个 http 标头的前 10 或 20 个字节就足够了。

【问题讨论】:

    标签: php performance apache http-headers http-status-code-404


    【解决方案1】:

    状态码在 r->status 中,响应头在表 r->headers_out 和 r->err_headers_out 中。这里有一个简单的提示——如果 CustomLog 可以记录您感兴趣的内容,只需阅读 mod_log_config.c 以了解在给定 request_rec 的情况下如何访问它。

    【讨论】:

      【解决方案2】:

      好的,我刚刚从实验中找到答案,我需要将AP_FTYPE_RESOURCE作为寄存器过滤函数的最后一个参数更改为AP_FTYPE_CONNECTION。

      【讨论】:

        猜你喜欢
        • 2012-03-20
        • 1970-01-01
        • 1970-01-01
        • 2021-06-05
        • 1970-01-01
        • 1970-01-01
        • 2016-03-30
        • 2017-12-10
        • 2013-06-09
        相关资源
        最近更新 更多