7

リモート Web サイトをダウンロードし (つまり、Curl のように)、それを文字列変数に読み込んでさらに処理する方法は (Javascript で) ありますか?

4

4 に答える 4

7

Same Origin Policyに従って、同じドメインからのみファイルをダウンロードできます。ただし、XMLHTTPRequest オブジェクトを使用して、同じドメインからコンテンツをダウンロードできます。

 var xhReq = createXMLHttpRequest();
 xhReq.open("GET", "page.html", true);
 xhReq.onreadystatechange = onResponse;
 xhReq.send(null);
 ...
 function onResponse() {
   if (xhReq.readyState != 4)  { return; }
   var serverResponse = xhReq.responseText;
   ...
 }

このポリシーを回避する方法はいくつかあり、そのいくつかは同じウィキペディアのページにリストされています。しかし、それはせいぜいハッキングであり、最悪の場合は違法です。

于 2008-12-16T14:44:13.803 に答える
1

確かに - URL にクロス ドメイン ポリシーがあるか、サーバー側のプロキシ スクリプトを作成しない限り、URL は同じドメインからのものである必要があります。

次のコードは、プロキシ PHP スクリプトを介した任意のドメインへの ajax 呼び出しの例です。


var xmlhttp =  new XMLHttpRequest();
xmlhttp.open("POST","http://localhost/proxy.php?url=http://google.com", true);
xmlhttp.onreadystatechange = function() {
    if (request.readyState == 4 && request.status == 200) {
      // ensure we have a response...
      if (xmlhttp.responseText) {
         var html =  xmlhttp.responseText;
         // do your processing here...
      }
    }
};
xmlhttp.send();

次に、proxy.php スクリプトを Curl (またはサーバー側の言語にある任意の URL ライブラリ) を介して指定された URL に接続し、ドメインからコンテンツをエコーするだけです...


<?php

// proxy.php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$_GET["url"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);
echo $result;

?>


すべてが理にかなっていることを願っています。

于 2008-12-16T14:48:33.327 に答える
0

ほとんどの場合、許可されません。Javascriptは、セキュリティ上の理由からこれを行うことを防ぎます。ただし、jQueryを使用して他のドメインからjsonデータをリクエストできます。これは、flickrから猫の写真を取得するjqueryドキュメントの例です...

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
    function(data){
      $.each(data.items, function(i,item){
        $("<img/>").attr("src", item.media.m).appendTo("#images");
        if ( i == 4 ) return false;
      });
    });

このコードはjQueryDocsにあります。ご覧のとおり、これはリクエストを行い、データを取得して、DOM内のいくつかの画像タグを猫の写真で更新します...

于 2008-12-16T16:53:59.377 に答える
0

Yahoo クエリ言語を使用して、Web 上の任意のページにクエリを実行できます。

たとえば、Googleホームページの完全なソースが必要な場合は、次のように使用できます。

select * from html where url="http://google.com" and xpath='/html' limit 1

JSON コールバックを使用して、返されたオブジェクトを再シリアル化する必要がありますが、ページの完全なビューを取得できます。

于 2008-12-16T16:07:19.517 に答える