我试图在论坛中寻找解决方案,但我找不到类似于我想要实现的东西。我在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的经验,我刚开始学习,所以我可能不熟悉许多概念。 提前致谢!
答案 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()。