我在这里阅读了很多帖子,大致相同的事情,但通常要求的人可以访问远程站点,并可以使用可用的方法来实现这一目标。我的情况有点不同,我只想在花费时间和精力试图让它发挥作用之前看看是否可行。
我尝试访问的网站是远程的,无论如何我无法访问它,并且只能从登录OpenVPN的计算机访问。
我正在编写的工具正在尝试从远程站点获取表单提交的结果。我不想解析结果或者无论如何都要修改它。我只想显示发送了Post Data的页面。远程站点使用AJAX进行表单提交。
它的代码是这样的:
<form name="MyForm" action="response_normal.php" method="post" onsubmit="xmlhttpPost('response_ajax_v2.php', 'MyForm', 'response', '<img src=\'pleasewait.gif\'>'); return false;">
在该页面上提交后,会发送三个值:
site : radio1
search : 000000000000
submit : Search Site
我可以将该帖子数据发送到页面并显示它吗?我希望在iframe中执行此操作 - 因为VPN限制而无法在服务器端执行此操作。
答案 0 :(得分:1)
由于您访问离线服务器的计算机位于可以访问远程系统的VPN上(假设此远程系统在您的控制之下),您可以让异地服务器返回一些AJAX拉动的JavaScript数据 - 在这种情况下,是一个完整的HTML页面 - 它需要从远程系统使用类似JSONP的策略。
我过去曾将这项技术用于一些小项目。
从那里,您可以自由地处理您将要修改的数据,按原样返回或以其他方式返回。
就个人而言,如果可能,我会避免使用框架。当然,当时间紧张,没有任何限制;)
但是,如果远程系统不受您的控制(并且他们没有kickass CORS交叉访问政策),您唯一的选择就是,正如您在问题,框架。这是一个例子:
<!-- If the remote system is NOT under your control, it CANNOT respond with the X-Frame-Options header set to SAMEORIGIN or DENY! -->
<iframe id="inlineframe" src="http://www.randomwebsite.com" frameborder="0" scrolling="auto" width="800" height="300" marginwidth="5" marginheight="5" ></iframe>
//Depending on the JS you put here, you may get some "unsafe Javascript" warnings from certain browsers
~function()
{
var frame = document.getElementById('inlineframe'),
ref = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument;
// ref is now a reference to the document of the content within the iframe
// You can now do your getElementById/getElementByTagName etc. and otherwise
// manipulate the response as you please.
console.log(ref);
}();
可在此处找到一个工作示例:http://jsfiddle.net/FTudJ/
iframe的内容应该是远程页面的提交结果,或者远程服务器响应的内容。如果您不想修改任何内容,那么您甚至不需要Javascript组件。
密钥将是您指定为iframe源的网址。现在,如果远程系统不支持表单提交的GET请求(在您的示例代码中我看到“POST”方法),再加上您无法控制它并且您的异地系统无法访问它无论如何,你唯一的其他选择是:
只需将表单的典型访问网址提供给iframe,而不是直接提供表单的提交网址。从那里,使用JavaScript填充具有必要值的表单,然后在iframe中提交表单,就像您是用户一样。从那里,您可以将结果反馈回JavaScript或只是按原样显示。
找到一种方法让您的场外服务器进入VPN网络,以便它可以代表您与远程系统通信。当然,如果这很容易,我想你会先做到这一点!
将您的用户重定向到远程站点 - 可能使用像Google一样的框架集+横幅框架,让他们做他们需要做的事情,然后告诉他们在完成后回来。
-
我看到你正在使用PHP。只要执行PHP的服务器可以访问可以访问此远程系统的VPN - 全部通过传统HTTP - 来自服务器端的简单curl调用就足够了,因为您可以使用AJAX来传递结果给客户。
这些链接可能会有所帮助:
击>