首页 > 解决方案 > 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 数据 - 这是有效的(在不同的验证器上验证)。

我该如何解决这个问题?

谢谢

标签: rubyhttp-headerssavon

解决方案


推荐阅读