2011-12-07 14 views
1

私はここで少し恥ずかしく思っています。リモートでコンテンツを取得しようとしているからです。しかし、私はそれが私に不可能に見える仕様を持っている、私は文字通り一日中それを成功して過ごした。クライアントのIPを使用してコンテンツを取得する

  1. 取得する必要があるデータは、離れたサーバーにあります。
  2. 私はこのサーバーを所有していません(私はそれを変更することはできません)。
  3. これは文字列なので、取得してPHPに渡す必要があります。
  4. は、実際にデータを取得する(サーバーではなくIPである必要があります)クライアントの(Webブラウザーで閲覧する)ブラウザーでなければなりません。

そして、クロスドメインポリシーで、私はそれを回避することはできていないようです。私はすでにそれについて知っていましたが、まだ失敗したシンプルなAjaxクエリを試しました。それから、私は「なぜiFramesを使わないのですか?」と思っていますが、同じ制限があてはまるようです。私はYQL(http://developer.yahoo.com/yql/)の使用について読んでいましたが、私がブロックしようとしていたサーバが、YQLのユーザエージェントをブロックしてこの手法を使用することができなくなったことに気付きました。

だから、それは私が考えることができる、または見つけることのすべてです。しかし、私は

ああ、私のJavascriptの知識は非常に基本的で、これはどちらか助けてはいけない...それもハードに見えない、それはそのようなことを達成することはできません信じることができません。

+0

新しいブラウザウィンドウを起動して文字列を取得して、ブラウザにカットアンドペーストしてもらうことを考えましたか?また、クライアントのIPアドレスは一意ではありません。 2つは同じNATの背後にあるより多くのPCであり、企業のファイアウォールは外部サイトと同じIPを持つことになります。なぜサーバーはIPに基づいて認証されますか? – selbie

+0

IPを使用する必要があるユーザーを認証するのではなく、サーバーから返されたデータがそれ以外の場合には関連しないためです。私が何をしようとしているのか。文字列は実際にはXMLなので、それも見えません。 – Ben

答えて

1

これは同じ起源のポリシーが存在する1つの理由です。あなたは、あなたのウェブページアクセスデータを、別のサーバに、ユーザが知らずに、そして他のサーバから「許可」を得ずにアクセスしようとしています。

双方向の信頼システム(「他のサーバー」を変更すること)を確立することなく、これは不可能だと私は信じています。

新しいxhrとクロスドメインのサポートがあっても、通信が機能するにはまだ双方向の信頼関係が必要です。

ファットクライアントのアプローチを検討するか、@selbieの提案を試してみて、手動によるユーザーのやりとりが必要な場合があります。

+0

はい、なぜPHPやその他の言語で実際にはAjaxを使用しないのですか?私はこの部分を理解していません。私は単純なfile_get_contents()を使うか、ブラウザを使ってURLをブラウズするか、cURLなどのHTTPリクエスト "maker"を参照することができます。それはまったく同じことです。他のサーバーの管理者は自分のサイトにアクセスするつもりはわかりません。それでもオンラインであれば、誰かがそうすると思うはずです。何も変わっていない。 – Ben

+0

「ファットクライアントアプローチ」とはどういう意味ですか? – Ben

+0

PHPはサーバ側のコードです。それはブラウザでは実行されません。 Webブラウザは同じ起点ポリシーを強制します。あなたの他の2つのアプローチの違いは次のとおりです。1)PHPではリクエストを処理するサーバーなので、リクエストにはサーバーのIPアドレス(問題を解決しようとしている問題)があります。2)これは、ユーザーが他のサーバーを暗黙的に信頼していることを意味します。 – Alan

-1

私は本当に醜い解決策を見ることができます:iFrames。 This articleには、いくつかの良い情報が含まれています。あなたはFlashアプリケーションでそれを行うことができ

+0

私はこの記事を読んだことがありますが、実際にやりたいことができるかどうかはわかりません。私はiFrameのデータにアクセスしようとしましたが、クロスドメインポリシーは私にそれをブロックします。 – Ben

+0

これは本当に解決策ですか? 「他の」サーバからのホストされたiframeは、ローカルサーバからiframeと適切に通信する必要があります。 – Alan

+0

そして、遠いサーバーでは何も変更できないことを忘れないでください。基本的に私は必要な情報をXMLシートに返します。この離れたサーバー以外の場所の情報を私が入手できる方法はありません。 – Ben

-1

flash with a crossdomain.xml file(あなたが他のサーバーを管理していないので、しかし助けにはなりません)

新しいブラウザでCORSがあるが - アクセス制御 - 許可 - 起源ヘッダが必要ですサーバー側で設定します。

JSONPも試してみることができます(ただし、他のサーバーを所有していないため動作しません)。

私はあなたが弾丸を噛む必要があると思うし、他の方法でコンテンツを取得する必要があると思います(例えばサーバ側で)。

+0

crossdomain.xmlとFlashについては、他のサーバーに対応するcrossdomain.xmlファイルが必要であると確信しています。 CORSはまた、他のサーバにクロスドメインコールをサポートすることも要求しています。 – Alan

+0

あなたは正しいです、私は答えにこれを追加します –

+0

はい、CORSは既に私が考えたオプションでしたが、私の場合は動作しませんでした。 Flashと同じです。でも、ありがとう! – Ben

0
The same origin policy prevents document or script loaded from one 
origin from getting or setting properties of a document from a different 
origin. 

- 今、あなたはそれを得るために、いくつかの牛車を行いたい場合http://www.mozilla.org/projects/security/components/same-origin.html

から... visit this site

注:私は上記のサイト上のいずれかの方法を試したことがないとその成功を保証することはできません。

+0

第2リンクでは、JSONPに似たjavascriptで他のサーバーに応答する必要があります。 – Alan

+0

既にこれを試しました。基本的にYQLをプロキシとして使用し、JSON結果を取得します。 Yahoo!のユーザーエージェントはブロックされています。それを回避することはできません。 – Ben

関連する問題