IBM DataPower - 如何处理来自openurl的HTML响应?

时间:2018-04-25 19:37:04

标签: post request response urlopen ibm-datapower

我试图在论坛中寻找解决方案,但我找不到类似于我想要实现的东西。我在MPG中有一个网关脚本,有点像这样:

session.INPUT.readAsJSON(function (error, json) {
    if (error){
            throw error;
    } else {
    var SAMLResponse = json['SAMLResponse'];
    var RelayState = json['RelayState'];
    var urlopen = require('urlopen');
    var options = {
                            target: 'https://************.com/e32d32der2tj90g8h4',
                            method: 'POST',
                            headers: { 'HEADER_NAME' : 'VALUE'},
                            contentType: 'application/json',
                            timeout: 60,
                            sslClientProfile: 'ClientProfile',
                            data: {"SAMLResponse": SAMLResponse, "RelayState": RelayState}
    };
    urlopen.open(options, function(error, response) {
      if (error) {
            session.output.write("urlopen error: "+JSON.stringify(error));
      } else {
            var responseStatusCode = response.statusCode;
            var responseReasonPhrase = response.reasonPhrase;

            response.readAsBuffer(function(error, responseData){
              if (error){
                    throw error;
              } else {
                    session.output.write(responseData);
                    console.log(responseData);
              }
            });
      }
    });
    }
});

我正在做一个POST请求,我从urlopen函数得到的响应是一个HTML页面,如何在浏览器中显示该页面的内容?我需要它来启动流程。我在这里走向错误的方向吗? POST到URI并在DataPower中显示响应的最佳方法是什么? 关于我使用DataPower的经验,我刚开始学习,所以我可能不熟悉许多概念。 提前致谢!

1 个答案:

答案 0 :(得分:1)

session.INPUT.readAsJSON()表示您正在接收JSON数据作为输入(来自POST)。

由于您是在多协议网关(MPGW)中构建它,因此如果响应是HTML并且没有进行后端调用({{1}除外),则需要将响应类型设置为non-xml。 1}})您还必须设置url-open()变量。

方案是否为:

skip-backside=1

或者:

JSON HTTP Request -> [MPGW] -> url-open() -> Backend server --| HTTP Response <-----------------------------------------|

如果没有后端调用,我建议在XML防火墙(XMLFW)服务中构建它,并将其设置为“loopback”和JSON HTTP Request -> [MPGW] -> url-open() --| (skip-backside) HTTP Response <------------------------|

如果有后端,并且您从non-xml发送HTML,那么只需要将MPGW响应类型设置为url-open()

如果是第二个选项,您可以在GWS中设置有效负载和标头,只需将目标(non-xml)称为MPGW背面连接,不需要url-open()。