gpt4 book ai didi

ruby-on-rails - 如何记录某个 url 的整个请求( header 、正文等)?

转载 作者:数据小太阳 更新时间:2023-10-29 06:48:54 27 4
gpt4 key购买 nike

我需要将所有请求(包括 HTTP header 、正文等)记录到某个 url。我试过这段代码:

def index
global_request_logging
end

private

def global_request_logging
http_request_header_keys = request.headers.keys.select{|header_name| header_name.match("^HTTP.*")}
http_request_headers = request.headers.select{|header_name, header_value| http_request_header_keys.index(header_name)}
logger.info "Received #{request.method.inspect} to #{request.url.inspect} from #{request.remote_ip.inspect}. Processing with headers #{http_request_headers.inspect} and params #{params.inspect}"
begin
yield
ensure
logger.info "Responding with #{response.status.inspect} => #{response.body.inspect}"
end
end

但它说 request.headers 不包含名为 keys 的方法。我还认为应该有一种更简单的方法或标准来做到这一点。最好不要使用 gem 。

最佳答案

看起来request.headers返回的是一个hash,但实际上返回的是Http::Headers的一个实例没有定义 keys 方法。

但是 Http::Headers 响应返回原始 env 哈希的 env。因此,以下工作:

http_request_header_keys = request.headers.env.keys.select do |header_name| 
header_name.match("^HTTP.*")
end

或者您可以遍历所有键值对并将它们复制到另一个散列中:

http_envs = {}.tap do |envs|
request.headers.each do |key, value|
envs[key] = value if key.downcase.starts_with?('http')
end
end

logger.info <<-LOG.squish
Received #{request.method.inspect}
to #{request.url.inspect}
from #{request.remote_ip.inspect}.
Processing
with headers #{http_envs.inspect}
and params #{params.inspect}"
LOG

总结一下:

around_action :log_everything, only: :index

def index
# ...
end

private
def log_everything
log_headers
yield
ensure
log_response
end

def log_headers
http_envs = {}.tap do |envs|
request.headers.each do |key, value|
envs[key] = value if key.downcase.starts_with?('http')
end
end

logger.info "Received #{request.method.inspect} to #{request.url.inspect} from #{request.remote_ip.inspect}. Processing with headers #{http_envs.inspect} and params #{params.inspect}"
end

def log_response
logger.info "Responding with #{response.status.inspect} => #{response.body.inspect}"
end

关于ruby-on-rails - 如何记录某个 url 的整个请求( header 、正文等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28687674/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com