ruby - SOAP:HTTP 错误 400。请求的标头名称无效
问题描述
我正在使用 Ruby On Rails gem 进行 SOAP 调用,Savon
并在发出请求时收到以下错误消息:
Bad Request - Invalid Header
HTTP Error 400. The request has an invalid header name.
这听起来很具有描述性,但我仍然无法找出问题所在。我还在这里找到了一些关于 SO 的主题,但不幸的是,它们都没有帮助我。
这是我建立连接的方法:
client = Savon.client(endpoint: wsdl_url,
namespace: '',
env_namespace: :s,
basic_auth: ["username", "password"],
ssl_verify_mode: :none,
log: true,
logger: Rails.logger,
pretty_print_xml: true)
@response = client.call('MyAction',
soap_action: 'url address',
xml: xml_payload,
headers: {
'Content-Type': 'application/soap+xml; charset=utf-8',
})
这是(终端)控制台生成的错误:
SOAP response (status 400)
<?xml version="1.0"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"/>
<BODY><h2>Bad Request - Invalid Header</h2>
<hr><p>HTTP Error 400. The request has an invalid header name.</p>
</hr></BODY>
</HEAD>
</HTML>
如果我从此更改标题配置:
@response = client.call('MyAction',
soap_action: 'url address',
xml: xml_payload,
headers: {
'Content-Type': 'application/soap+xml; charset=utf-8',
})
对此:
@response = client.call('MyAction',
soap_action: 'url address',
xml: xml_payload)
错误消息说的少了很多:
Savon::HTTPError - HTTP error (400):
所以标题使它更具描述性。如果我查看由 生成的标头Savon
,它看起来像这样:
SOAP request: https://URL_ENDPOINT
Content-Type: application/soap+xml; charset=utf-8, SOAPAction: "http://URL_ENDPOINT/MyAction", Content-Type: text/xml;charset=UTF-8, Content-Length: 2935
哪些标题是错误的?我如何在这里调试/检查它?
我还尝试调查此问题,Postman
但仅收到以下错误消息:
400 Bad Request - The request cannot be fulfilled due to bad syntax.
我还尝试验证我发送到服务器的生成的 XML 数据 - 这是有效的(在不同的验证器上验证)。
我该如何解决这个问题?
谢谢
解决方案
推荐阅读
- javascript - 在导出上放置异步等待
- vuejs2 - Nuxt 中间件调用两次
- javascript - 我需要一个按顺序多次调用相同 javascript 函数的示例
- javascript - 为什么 Sequelize 将“媒体”复数化为媒体
- javascript - Hackerrank 挑战赛 - 跨栏比赛。我做错了什么?
- spring-boot - 测试运行后 jacoco maven 插件 0% 覆盖率
- git - 通过 SSH 进行 git clone 需要很长时间才能完成
- python - Python:导致 WinError 10013 的原始套接字
- sas - 输入变量 SAS 宏
- oracle - 访问 Oracle 自治云数据库中的 RDF 模型