您的位置:首页 > 财经 > 产业 > 三亚发布紧急通知_创建网站的app_百度知道在线_太原百度seo排名软件

三亚发布紧急通知_创建网站的app_百度知道在线_太原百度seo排名软件

2024/12/23 12:15:22 来源:https://blog.csdn.net/qq_31725391/article/details/144485643  浏览:    关键词:三亚发布紧急通知_创建网站的app_百度知道在线_太原百度seo排名软件
三亚发布紧急通知_创建网站的app_百度知道在线_太原百度seo排名软件

前言

在开发的过程中, 经常会有抓包的需求, 查看请求体和响应体. 使用 charles 等抓包工具会遇到一些麻烦, 如:

  1. localhost 请求无法捕获
  2. 有些工具配置代理比较麻烦, 如docker配置代理后需要重启
  3. https协议需要代理端配置证书进行解密, 比较麻烦

于是, 我就在想, 能否直接在服务端将所有的请求体和响应体打印出来, 不就完美解决这个问题了么?

一般来说, 通过nginx代理请求, 所有的请求都过nginx, nginx自身也有https的私钥, 会进行解密.

那么问题来了, 如何通过nginx打印请求呢?

中间探索的过程就不提了, 直接上结果.

lua打印

这里直接使用openresty/openresty镜像了, 当然如果直接使用nginx编译lua插件也是可以的.

在配置文件中添加如下lua脚本以打印完整请求内容:

# 将请求信息暂存, 放到最后一起打印
access_by_lua_block {ngx.req.read_body()local req_body = ngx.req.get_body_data()local req_uri = ngx.var.request_uriif req_body and #req_body > 1024 * 1024 thenreq_body = "Request too large"endif not req_body thenreq_body = "No request body"endlocal headers = ngx.req.get_headers()local header_str = ""for k, v in pairs(headers) doheader_str = header_str .. string.format("%s: %s\n", k, v)endngx.ctx.req_info = {uri = req_uri,body = req_body,headers = header_str}
}body_filter_by_lua_block {local resp_body = ngx.arg[1]local req_info = ngx.ctx.req_info or {}local req_uri = req_info.uri or "Unknown URI"local req_body = req_info.body or "Unknown Request Body"local req_headers = req_info.headers or "Unknown Headers"local resp_headers = ngx.resp.get_headers()local resp_header_str = ""for k, v in pairs(resp_headers) doresp_header_str = resp_header_str .. string.format("%s: %s\n", k, v)endngx.log(ngx.ERR, string.format("Request URI: %s\nRequest Headers:\n%sRequest Body: %s\nResponse Headers:\n%sResponse Body: %s",req_uri,req_headers,req_body,resp_header_str,resp_body or "No response body"))
}

这段逻辑在location中.

完整内容可参考: https://github.com/hujingnb/docker_composer/tree/master/openresty

简单记录一下, 以方便后续获取请求使用

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com