You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IBM iSeries系统的Apache抓包或Tomcat捕获SOAP信封?排查504超时

捕获SOAP请求信封的方法(Apache + Tomcat环境)

一、在Apache中捕获SOAP请求

方法1:使用mod_dumpio模块

该模块可直接输出完整的请求/响应内容到Apache日志:

  1. 确认启用mod_dumpio模块,在Apache主配置文件(如httpd.conf)中添加或启用:
    LoadModule dumpio_module modules/mod_dumpio.so
    
    注:IBM i系统上的模块路径可能为/QOpenSys/pkgs/lib/httpd/modules/mod_dumpio.so,请根据实际安装路径调整。
  2. 添加以下配置开启请求捕获:
    DumpIOInput On
    DumpIOOutput On
    LogLevel dumpio:trace7
    
  3. 重启Apache服务,查看Apache错误日志(如error_log)即可找到包含SOAP信封的完整请求内容。测试完成后务必关闭该配置,避免日志量过大。

方法2:自定义日志格式记录请求体

通过mod_log_config自定义日志格式,直接记录SOAP请求体:
在Apache配置中添加:

# 定义包含请求体的日志格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{Content-Length}i %{Content-Type}i %{REQUEST_BODY}s" soap_request_log
# 指定日志文件路径
CustomLog logs/soap_requests.log soap_request_log

重启Apache后,soap_requests.log会记录POST类请求的内容(包括SOAP信封)。

二、在Tomcat中捕获SOAP请求

方法1:使用RequestDumperValve

Tomcat自带的Valve可输出请求的所有细节,包括SOAP请求体:

  1. 编辑Tomcat的server.xml,在AJP连接器配置段添加请求日志参数:
    <Connector port="8009" protocol="AJP/1.3"
               redirectPort="8443"
               enableLookups="false"
               requestLogEnabled="true"
               requestLogValveClass="org.apache.catalina.valves.RequestDumperValve"/>
    
    或直接在<Host>节点下添加该Valve:
    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
    </Host>
    
  2. 重启Tomcat,查看localhost.log或对应主机日志即可获取SOAP信封内容。测试完成后删除该配置,避免日志过载。

方法2:自定义Servlet Filter捕获请求

通过Java Filter精准捕获特定路径的SOAP请求:

  1. 编写Filter类:
    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.util.logging.Logger;
    
    public class SOAPRequestCaptureFilter implements Filter {
        private static final Logger logger = Logger.getLogger(SOAPRequestCaptureFilter.class.getName());
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest httpReq = (HttpServletRequest) request;
            // 仅捕获SOAP POST请求
            if ("POST".equalsIgnoreCase(httpReq.getMethod()) && "text/xml".equals(httpReq.getContentType())) {
                BufferedReader reader = httpReq.getReader();
                StringBuilder sb = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                }
                logger.info("Captured SOAP Request:\n" + sb.toString());
            }
            chain.doFilter(request, response);
        }
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {}
    
        @Override
        public void destroy() {}
    }
    
  2. 在web.xml中配置Filter,映射到你的SOAP服务路径:
    <filter>
        <filter-name>SOAPRequestCaptureFilter</filter-name>
        <filter-class>com.your.package.SOAPRequestCaptureFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SOAPRequestCaptureFilter</filter-name>
        <url-pattern>/your-soap-service/*</url-pattern>
    </filter-mapping>
    
  3. 重启Tomcat后,Filter会自动捕获指定路径下的SOAP请求并打印到Tomcat日志中。

注意事项

  • 所有日志捕获配置在测试完成后务必关闭,避免占用过多磁盘空间
  • 若请求包含敏感数据(如用户信息、认证凭证),捕获后需及时清理日志文件
  • IBM i系统上的Apache和Tomcat配置文件路径可能与常规环境不同,需根据实际安装路径调整

内容的提问来源于stack exchange,提问作者Rahul Dhiman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:13:10