水壶:RESTful API 调用中出现 400 错误

Posted

技术标签:

【中文标题】水壶:RESTful API 调用中出现 400 错误【英文标题】:Kettle: 400 Error in RESTful API call 【发布时间】:2015-09-29 20:12:46 【问题描述】:

我有一个有 7 个线程的进程,其中两个从定制的 rest 应用程序中提取数据。在使用基本身份验证获取令牌后,我正在使用 REST 客户端进行拉取。

这是完成所有这些的转换。

不幸的是,它只在 Spoon 中运行。我可以在 Spoon 中运行整个父进程并获得有效的结果,但是当我尝试通过从批处理脚本调用 Kitchen 来自动化它时,我没有得到我的有效数据,而是收到一个 400 错误,说我的主机名无效。我可以从日志中看出我使用了正确的 url,甚至得到了一个有效的令牌,但是结果数据只是 400 错误。而且这只发生在 Spoon 之外,不管我在什么权限下运行它。

这似乎是 Kettle 中的一个错误,我正在寻求解决方法,但是欢迎任何建议

更新 1:我们已与接收服务器所有者确定他们没有在 IIS 日志中接收请求,因此我们这边的某些事情正在终止请求。厨房和勺子的权限级别有区别吗?我们都以管理员的最高权限运行,但仍然看到差异

【问题讨论】:

如何将主机名传递给“Rest Client”字段或变量步骤?在 jvm 上下文中使用变量或在 Spoon 中定义但不在作业中定义的变量是常见的错误。无论如何使用非常简单的调试工具“写入日志”步骤并将其放在 Rest Client 步骤之前。 url 作为参数从父作业对转换的调用传入。在日志中我可以看到它正在使用正确的 url,当它注意到它在从该 url 获得响应之前有 136 毫秒的延迟:2015/09/29 23:20:16 - REST Get Data.0 - Response时间(毫秒):[134] 为 [valid.url.location?programcode=set] 我不喜欢将参数从作业传递到转换的策略。它导致勺子和厨房之间的错误。设置转换参数和在测试目的中为其分配默认值的常见错误。当您使用 Spoon 时,一切似乎都“OK”,但是,然后您在厨房中使用相同的工作,尽管您从工作中传递了值,但它总是使用默认参数,看起来它可以工作,但您得到错误的数据。 但即便如此,我也将值设置为默认值,因为我已经做了很多测试,但我们仍然遇到错误。 【参考方案1】:

如果您使用 GET 方法从您的 api 检索数据,请尝试使用 HTTP 客户端步骤,而不是 REST 步骤。

其他选项是仔细检查您的 Rest 客户端步骤中的设置。我不认为是一个错误,我经常使用这一步。

错误 400 表示错误请求,所以这就是你在做什么:你的 api 不期望的错误请求。

【讨论】:

我将使用 http 客户端和 get 方法进行测试,但是我想我已经测试过了。而且它甚至没有访问 API,我们让所有者检查了他们的 iss 日志,他们没有看到通过厨房或平底锅发出的请求 通过http客户端运行相同的请求没有任何改变,同样的400错误【参考方案2】:

我们追踪到版本不同。批处理文件调用的是旧版本的 Kettle,而 Spoon 使用的是更正此错误的新版本

【讨论】:

以上是关于水壶:RESTful API 调用中出现 400 错误的主要内容,如果未能解决你的问题,请参考以下文章

restful API

豆瓣restful api 状态和错误码

RestFul API

使用 RESTful 服务保护跨域的 API 调用

为啥此 Django API 调用出现意外的关键字参数错误?

java调用restful api接口,有没有啥好的框架推荐