Node-red post返回部分XML响应

时间:2016-05-15 19:04:19

标签: xml http node-red

当我使用Postman将XML有效负载发布到服务器时,我得到了完整的响应。

<?xml version="1.0" encoding="UTF-8"?>
<userResponse>
    <status>1</status>
    <message></message>
    <results>
        <account>
            <email>foo@example.com</email>
            <username>developer</username>
            <status>1</status>
        </account>
        <contact>
            <firstName>foo</firstName>
            <lastName>bar</lastName>
        </contact>
    </results>
</userResponse> 

但是当我通过node-red http请求提交相同的有效负载时,我得到了部分响应。

msg.payload = '<?xml version="1.0" encoding="UTF-8"?><userRequest><authentication><username>foo</username><password>bar</password></authentication><action>get</action></userRequest>';
msg.headers = {};
msg.headers['content-type'] = 'application/xml';
return msg;

// Response
<?xml version="1.0" encoding="UTF-8"?>
<userResponse>
    <status>1</status>
    <message></message>
</userResponse>

流程非常简单。 http in,函数定义上面的头和有效负载,http post,http response。

此流程中根本没有处理响应。

为什么node-red可能会删除&#39;结果&#39;从回应?

到目前为止,我的猜测是:

  1. Node-red无法正确解析它,因此会丢弃不可解析的数据。但是我通过XML验证器运行了完整的响应,发现没有问题
  2. 请求不会等待足够长的时间来完成响应并截断
  3. 我在邮递员的回应中注意到两件事:

    • 内容编码→gzip
    • Content-Type→text / html;字符集= UTF-8

    那些人提出问题:

    • 默认情况下是否可以节点红色解码gzip?
    • 它是否会对声称为text / html的XML响应做出正确回应?
    • 如果没有,除了要求客户修复他们的回复外,如何处理?

    我不确定从这里看哪里。我可以做些什么测试来缩小范围?

    更新:似乎不是标题或超时导致问题

    我设置了另一个流来模拟响应。以相同的方式调用它可以正确地获取整个XML主体。添加2秒延迟也可以正确地获取完整的正文,并且当我从Postman调用它时,我的客户端API将返回所有相同的XML数据。

    客户端将内容类型的响应标头更改为text / xml。这没有改变什么节点红色作为响应返回。内部数据仍然缺失。

    所以,它不是数据,因为如果我使用Postman请求它并将其复制粘贴到新流的msg中,并在请求时返回它,则node-red显示所有数据。

    发送标头的情况似乎并不重要。

    我还没有将gzip作为原因消除,但似乎它实际上并没有被编码,因为node-red正在返回一些msg。

    我需要一些关于如何跟踪请求和响应的想法,并找出它与模拟响应的不同之处。

    如何在node-red post请求中调试msg流?

0 个答案:

没有答案