SAP CPI 教程003 如何抓取Http适配器异常信息

HTTP异常信息:HTTP异常通常指HTTP状态码 中表示请求失败的那一类(4xx客户端错误,5xx服务端错误)。在日常开发、测试或访问网站时遇到它们,可以按下面的分类快速定位问

题。

1 HTTP异常分类:

1.1 4xx:客户端错误 ------ "你(浏览器/客户端)的问题"

状态码 含义 常见场景与解决方法
400 Bad Request(错误请求) 请求参数格式不对、缺少必要字段、JSON 语法错误。 解决 :检查 API 文档,确认请求头(如 Content-Type: application/json)和请求体内容。
401 Unauthorized(未授权) 未登录,或 token/API key 过期、无效。 解决 :重新登录,或在请求头中加上正确的 Authorization
403 Forbidden(禁止访问) 已经登录,但没有权限 访问该资源(比如普通用户想进管理员页面)。 解决 :确认账号权限是否正确;如果是爬虫,可能需要添加 User-Agent 或处理反爬机制。
404 Not Found(找不到资源) 请求的 URL 地址有误,或后端确实没有该接口/文件。 解决:检查 URL 拼写(路径、大小写、斜杠)、确认服务是否已部署对应的接口。
405 Method Not Allowed(方法不允许) 使用了错误的 HTTP 方法,比如用 GET 请求了一个只支持 POST 的接口。 解决:查阅文档,改用正确的方法(POST/PUT/DELETE 等)。
429 Too Many Requests(请求过多) 在单位时间内请求次数触发了限流(常用于 API 频率控制)。 解决:降低请求频率,或添加延时等待。

1.2 5xx:服务端错误 ------ "服务器(后端)的问题"

状态码 含义 常见场景与解决方法
500 Internal Server Error(内部服务器错误) 后端代码抛了未捕获的异常(如空指针、数据库连接失败、语法错误)。 解决:这是后端需要修复的问题,前端/用户只能稍后重试,或反馈给开发人员查看日志。
502 Bad Gateway(错误的网关) 网关/代理(如 Nginx)从上游服务器(如 PHP-FPM、Tomcat)收到了无效响应,上游可能挂了。 解决:重启上游服务,或检查网关与上游的配置。
503 Service Unavailable(服务不可用) 服务器过载、正在维护、或故意拒绝服务。 解决:稍后重试;如果是自己的服务,检查 CPU/内存,或看是否开启了维护模式。
504 Gateway Timeout(网关超时) 网关等了太久,上游服务器没有在规定时间内响应。常见于数据库查询慢、调用外部接口超时。 解决:优化慢查询、调长超时时间、或检查网络链路。

2 CPI环境如何抓取HTTP错误日志:

下图是整个集成流程,发送一个http请求,通过request reply调用另外一个HTTP的服务,在这个服务中特意把get请求改成post请求,模拟系统报错行为,收到异常信息后我们在流程中新增一个exception subprocess的异常信息。

注意:一定需要有个exception subprocess的接受异常信息,否者无法打印出错误的日志。

代码解释: 11 行是读取系统变量CamelExceptionCaught信息

15 判断异常类别是org.apache.camel.component.ahc.AhcOperationFailedException

18 在cpi环境打印出log日志,会在cpi中新增一个tab页签。名字是http.ResponseBody

这要http就可以通过文件的形式查看到对应的日志。

Groovy 复制代码
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
def Message processData(Message message) {
    def map = message.getProperties();

    def ex = map.get("CamelExceptionCaught");
    if (ex!=null) {
        
        // an http adapter throws an instance of org.apache.camel.component.ahc.AhcOperationFailedException
        if (ex.getClass().getCanonicalName().equals("org.apache.camel.component.ahc.AhcOperationFailedException")) {
            
            def messageLog = messageLogFactory.getMessageLog(message);
            messageLog.addAttachmentAsString("http.ResponseBody", ex.getResponseBody(), "text/plain");

            message.setProperty("http.ResponseBody",ex.getResponseBody());
            message.setBody(ex.getResponseBody());

            message.setProperty("http.StatusCode",ex.getStatusCode());
            message.setProperty("http.StatusText",ex.getStatusText());
            
        }
    }

    return message;

}
相关推荐
147API7 小时前
AI 图片编辑接口报 400 怎么排查?先读错误体,再查参数、图片与 mask
网络·人工智能
戴西软件8 小时前
戴西CAxWorks.VPG车辆工程仿真软件技术解析(上)——安全仿真体系的自动化构建
运维·网络·数据库·人工智能·算法·安全·自动化
砚凝霜8 小时前
软考网络工程师|第 6 章 应用层安全协议、防火墙完整备考笔记
网络·笔记·安全
M158227690559 小时前
SG-CANFiber-120 (S) 环网 CAN 光纤中继器,解决工业 CAN 远距离通信难题
网络
小小龙学IT9 小时前
Day 26-27 项目实战:从零构建一个高并发聊天室(epoll + 线程池)
linux·服务器·c语言·开发语言·网络
灵析表格9 小时前
灵析表格手机号处理函数深度分析报告
前端·网络·json·wps·灵析表格·excel公式盒子
chanmama88889 小时前
品牌全域洞察怎么做?蝉妈妈拆解竞品策略
大数据·网络·人工智能·经验分享·社交电子
智海深蓝9 小时前
智慧渔业海上养殖数字孪生实践方向与难点拆解分析
java·前端·网络
雨声不在9 小时前
vm.mmap_rnd_bits 引发 ASAN CPU 100% 问题解析
linux·服务器·网络
Fnetlink19 小时前
Fnet 云网安 260807
服务器·网络·人工智能·安全·网络安全