リモート Web サイトをダウンロードし (つまり、Curl のように)、それを文字列変数に読み込んでさらに処理する方法は (Javascript で) ありますか?
4 に答える
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;
...
}
このポリシーを回避する方法はいくつかあり、そのいくつかは同じウィキペディアのページにリストされています。しかし、それはせいぜいハッキングであり、最悪の場合は違法です。
確かに - 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;
?>
すべてが理にかなっていることを願っています。
ほとんどの場合、許可されません。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内のいくつかの画像タグを猫の写真で更新します...
Yahoo クエリ言語を使用して、Web 上の任意のページにクエリを実行できます。
たとえば、Googleホームページの完全なソースが必要な場合は、次のように使用できます。
select * from html where url="http://google.com" and xpath='/html' limit 1
JSON コールバックを使用して、返されたオブジェクトを再シリアル化する必要がありますが、ページの完全なビューを取得できます。