1

ここでほぼ同じことを尋ねるかなりの数の投稿を読みましたが、通常、質問者はリモートサイトにアクセスでき、これを達成するために利用可能な方法を使用できます. 私の状況は少し異なり、時間と労力を費やして機能させる前に、それが可能かどうかを確認したかっただけです.

アクセスしようとしているサイトはリモートで、とにかくアクセスできず、OpenVPN にログインしているコンピューターからのみアクセスできます。

私が書いているツールは、リモート サイトから送信されたフォームの結果を取得しようとしています。とにかく結果を解析したり、変更したりしたくありません。投稿データが送信されたページを表示したいだけです。リモート サイトは、フォームの送信に AJAX を使用します。

コードは次のとおりです。

<form name="MyForm" action="response_normal.php" method="post" onsubmit="xmlhttpPost('response_ajax_v2.php', 'MyForm', 'response', '<img src=\'pleasewait.gif\'>'); return false;">

そのページで送信すると、次の 3 つの値が送信されます。

site : radio1
search : 000000000000
submit : Search Site

その投稿データをページに送信して表示するだけでよいのでしょうか。VPNの制限によりサーバー側で実行できないため、iframeでこれを実行したいと考えています。

4

1 に答える 1

1

オフサイト サーバーにアクセスしているコンピューターは、リモート システムにアクセスできる VPN 上にあるため (そして、このリモート システムがユーザーの制御下にあると仮定します)、オフサイト サーバーに、データを AJAX でプルする JavaScript を返すようにさせることができます。この場合、完全な HTML ページです。JSONP のような戦略を使用して、リモート システムから取得する必要があります。

私は過去にいくつかの小さなプロジェクトにこの手法を使用しました。

そこから、データを変更したり、そのまま戻したり、その他の方法でデータを自由に処理できます。

個人的には、できればフレームの使用は避けたいと思っています。もちろん、時間に縛られているときは、何も立ち入り禁止ではありません ;)

ただし、リモートシステムがあなたの管理下にない場合(そして彼らにキックアス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 のソースとして指定した URL になります。ここで、リモート システムがフォーム送信の GET 要求をサポートしていない場合 (コード例では、「POST」メソッドが表示されます)、それを制御できず、オフサイト システムがそれにアクセスできないという事実と相まって、とにかく、他の唯一のオプションは次のとおりです。

  • フォームの送信 URL を直接指定する代わりに、フォームの一般的なアクセス URL を iframe に指定するだけです。そこから、JavaScript を使用してフォームに必要な値を入力し、ユーザーであるかのように iframe 内でフォームを送信します。そこから、結果を JavaScript にスクレイピングするか、そのまま表示することができます。

  • オフサイト サーバーを VPN ネットワークに接続して、ユーザーに代わってリモート システムと通信できるようにする方法を見つけます。もちろん、それが簡単なら、あなたはそれを最初にやったと思います!

  • ユーザーをリモート サイトにリダイレクトします。おそらく Google が行っていたように、フレームセット + バナー フレームを使用して、そこで必要なことを実行させ、完了したら戻ってくるように伝えます。

--

PHPを使用していることがわかります。PHP を実行しているサーバーが、従来の HTTP 全体でこのリモート システムにアクセスできる VPN にアクセスできる限り、AJAX を使用して結果を渡すことができるため、サーバー側からの単純な curl 呼び出しで十分です。クライアントに。

次のリンクが役立つ場合があります。

于 2013-03-17T07:39:04.963 に答える