Postman HTTP 状态 400 - 为啥?

Posted

技术标签:

【中文标题】Postman HTTP 状态 400 - 为啥?【英文标题】:Postman HTTP Status 400 - why?Postman HTTP 状态 400 - 为什么? 【发布时间】:2018-02-20 20:55:31 【问题描述】:

我想通过http://servername:7047/DynamicsNAV71/WS/CRONUS%20AG/Codeunit/WSInterface

使用 Dynamics NAV 2013 R2 中的 SOAP Web 服务

我只能通过 Chrome 访问此页面,它会要求我提供凭据(正确且有效)。 如果我使用 Crome 登录并启动 Postman,我就可以使用它:

POST /DynamicsNAV71/WS/CRONUS%20AG/Codeunit/WSInterface HTTP/1.1
Host: servername:7047
Content-Type: text/xml
SOAPAction: urn:microsoft-dynamics-schemas/codeunit/WSInterface:Process
Cache-Control: no-cache
Postman-Token: 5e640ab7-d0af-a098-0665-da4fa281f892

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsin="urn:microsoft-dynamics-schemas/codeunit/WSInterface">
   <soapenv:Header/>
   <soapenv:Body>
       <wsin:Process>
           <wsin:request>INPUT</wsin:request>
           <wsin:response>FAKE_RESPONSE</wsin:response>
       </wsin:Process>
   </soapenv:Body>
</soapenv:Envelope>

并获得状态码 200 OK 作为响应。

当我关闭 Chrome 浏览器并再次发送请求时,我得到了状态 401(未授权),因此我添加了授权标头。之后,我得到带有以下标题的状态 400:

POST /DynamicsNAV71/WS/CRONUS%20AG/Codeunit/WSInterface HTTP/1.1
Host: servername:7047
Content-Type: text/xml
SOAPAction: urn:microsoft-dynamics-schemas/codeunit/WSInterface:Process
Authorization: NTLM YWNhbVxncnU6Z3J1MTIzNA==
Cache-Control: no-cache
Postman-Token: 595777b7-5183-38d3-d49b-6bc5d4e3d30e

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsin="urn:microsoft-dynamics-schemas/codeunit/WSInterface">
   <soapenv:Header/>
       <soapenv:Body>
            <wsin:Process>
                <wsin:request>INPUT</wsin:request>
                <wsin:response>FAKE_RESPONSE</wsin:response>
            </wsin:Process>
       </soapenv:Body>
</soapenv:Envelope>

除了 Authorization 标头之外没有任何变化,那么为什么我会得到 Status 400?有人可以帮忙吗? 如果我使用 Chrome 登录,授权标头是否发送都无关紧要...

【问题讨论】:

【参考方案1】:

postman 不支持 NTLM 身份验证,您可以使用 Fiddler 或您的 chrome 浏览器进行身份验证。 https://github.com/postmanlabs/postman-app-support/issues/1137

【讨论】:

在“授权”选项卡中,我只有:“无身份验证”、“基本身份验证”、“摘要式身份验证”、“OAuth 1.0”、“OAuth 2.0”、“Hawk 身份验证”、“AWS 签名” ,所以与 NTLM 无关 - 但授权有效! postman 不支持 NTLM 身份验证,您可以使用 Fiddler 或您的 chrome 浏览器进行身份验证。但是将其用作标头中的键会产生错误的请求。 我可以取消选中导航设置以使用 NTLM,然后通过“协商”请求但也会收到状态 400。“基本身份验证”根本不起作用...

以上是关于Postman HTTP 状态 400 - 为啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Axios 中收到 400 个错误请求,但 Postman 状态为 200

错误:请求失败,状态码为 400。在 POSTMAN 和应用程序中发送之间的差异

如何获取返回 Http 状态代码 406 或 400 的 API 的响应 JSON

http请求400错误

线上http400,postman正常

为啥HttpClient请求返回400,URL请求返回302正常