nginx lua получить ответ тела - PullRequest
0 голосов
/ 30 января 2019

Мне нужно получить ответ тела, например.HTML-код ответа от URL-адреса. Я использую следующий код.

location /configure/result.php {

  log_by_lua_block  {
    ngx.log(ngx.ERR, "REQUEST capturing started")

    json = require "json"

    function getval(v, def)
      if v == nil then
         return def
      end
      return v
    end

    local data = {
      request={},
      response={}
    }
    local req = data.request
    local resp = data.response

    req["host"] = ngx.var.host
    req["uri"] = ngx.var.uri
    req["headers"] = ngx.req.get_headers()
    req["time"] = ngx.req.start_time()
    req["method"] = ngx.req.get_method()
    req["get_args"] = ngx.req.get_uri_args()
    req["post_args"] = ngx.req.get_post_args()
    req["body"] = ngx.var.request_body

    content_type = getval(ngx.var.CONTENT_TYPE, "")

    resp["headers"] = ngx.resp.get_headers()
    resp["status"] = ngx.status
    resp["duration"] = ngx.var.upstream_response_time
    resp["time"] = ngx.now()
    resp["body"] = ngx.var.response_body -- Problem Here

    ngx.log(ngx.CRIT, json.encode(data));
  }
}

Но он не регистрирует данные ответа, полученные из этого URL-адреса, например.обработанный исходный код, как я могу получить response.data?

Моя идея состоит в том, чтобы получить данные ответа, а затем использовать regEx для считывания значения speciq из исходного кода, который затем будет выполнять xy

1 Ответ

0 голосов
/ 30 января 2019

Я не могу проверить это сейчас, но, возможно, ответ недоступен во время фазы обработки запроса?

Вы можете попытаться получить данные ответа в body_filter_by_lua_block, используя 'ngx.ctx' таблица:

    body_filter_by_lua_block {
        ngx.ctx.response_body = ngx.arg[1]
    }

и затем использовать его в блоке log_by_lua_block:

    log_by_lua_block {
        ...
        resp["body"] = ngx.ctx.response_body
        ngx.log(ngx.CRIT, json.encode(data))
    }

(обратите внимание, что это только предположение, пожалуйста, дайте мне знать, если это работает)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...