gpt4 book ai didi

ssl - Xagent 充当在 SSL 环境中提供非 SSL 数据的代理

转载 作者:太空宇宙 更新时间:2023-11-03 14:16:38 27 4
gpt4 key购买 nike

我们的内联网必须始终使用 https://,这对于存储在我们自己的服务器上的数据来说没问题,但对于从第三方站点获取的数据会造成问题。例如,我们有一个来自第三方网站的货币汇率列表。第三方站点不提供 https 选项。为避免内容被 IE(自最新版本以来甚至是 Firefox!)阻止,通过代理获取第三方数据似乎是个好主意。我们的管理员不热衷于设置 Apache 服务器作为代理,并要求我调查“通过 Xpages 来做”。我是一个完全的 Java 新手,我很难理解为什么我的 Xagent 不起作用。

这是我到目前为止所做的:Stephan Wissel 用 Ja​​va 编写了一个 HTTPReader 类,我已经设法将其添加到我的 nsf 中。我已经编写了一个 Xagent,它成功调用了此类的 getURL 方法并将远程 URL 的内容作为字符串获取。我遇到的问题是读取字符串以便我可以将其写回。我在 BufferedReader 行上收到“执行 JavaScript Action 表达式时出错”错误。这是我的 Xagent 代码:

<xp:this.beforeRenderResponse><![CDATA[#{javascript:importPackage(org.lotususers.tools);
importPackage(java.io);

var httpReader = org.lotususers.tools.HTTPReader();
var remoteURL = context.getUrlParameter("ru");
var remoteHTML:String = httpReader.getURL(remoteURL);

var bufferedReader:BufferedReader = new BufferedReader(new InputStreamReader(remoteHTML));

var outputString = "";
while(bufferedReader.readLine() != null){
outputString += bufferedReader.readLine();
};

var externalContext = facesContext.getExternalContext();
var writer = facesContext.getResponseWriter();
var response = externalContext.getResponse();
response.setContentType("text/html");
response.setHeader("Cache-Control", "no-cache");

writer.write(outputString);
writer.endDocument();
}]]></xp:this.beforeRenderResponse>

如果我用一行代码将 remoteHTML 打印到控制台(即 print(remoteHTML)),那么我可以看到 HTML 已成功获取,所以至少我知道该部分已成功。

我花了几个小时阅读有关 BufferedReader 的文档,并试图找出我做错了什么。我已经尝试了我能为 BufferedReader 行找到的所有变体,但没有任何效果(.openStream().getInputStream())。例如:

var bufferedReader:BufferedReader = new BufferedReader(new InputStreamReader(remoteHTML.getInputStream()));

我也试过完全限定路径,但这没有什么区别:

var bufferedReader:java.io.BufferedReader = new java.io.BufferedReader(new java.io.InputStreamReader(remoteHTML.getInputStream()));

如果有人能告诉我那条线有什么问题,我将不胜感激。提前致谢。

最佳答案

在你的代码中

while(bufferedReader.readLine() != null){
outputString += bufferedReader.readLine();
};

你会错过每一行放入 outputString,此外,当 outputString += bufferedReader.readLine(); 会抛出 JavaScript 错误时,读入最后一行后可能会发生这种情况没有线了。

改为使用此代码:

var line = bufferedReader.readLine();
while(line != null){
outputString += line;
line = bufferedReader.readLine();
};

编辑:

以下 XAgent 应该可以满足您的需求。 httpReader.getURL(remoteURL) 为您提供已经完成的 HTML,因此您可以立即将其用于编写器,而不必处理流。

<xp:this.beforeRenderResponse><![CDATA[#{javascript:
try {
var httpReader = org.lotususers.tools.HTTPReader();
var remoteURL = context.getUrlParameter("ru");
var remoteHTML = httpReader.getURL(remoteURL);
var externalContext = facesContext.getExternalContext();
var response = externalContext.getResponse();
var writer = response.getWriter();
response.setContentType("text/html");
response.setHeader("Cache-Control", "no-cache");
writer.write(remoteHTML);
facesContext.responseComplete();
} catch (e) {
_dump(e);
}}]]></xp:this.beforeRenderResponse>

XAgent 返回由参数“ru”定义的目标URL 的页面内容。这是调用 XAgent 的示例 URL:

https://Server/Test.nsf/XAgent.xsp?ru=http://www.web.de

关于ssl - Xagent 充当在 SSL 环境中提供非 SSL 数据的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18739616/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com