![](/img/trans.png)
[英]How to solve "CORS" while trying to scrape sites like Google.com using JavaScript?
[英]Javascript reporting CORS error when loading google.com
這是Javascript代碼段:
var requ = "http://google.com";
var xmlhttp;
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function()
{
// BREAKPOINT A
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
// never gets into this block
}
};
xmlhttp.open("GET", requ, true);
xmlhttp.send();
代碼執行正好通過BREAKPOINT A 2次。
第一次:xmlhttp.readyState == 1; xmlhttp.status == 0;
第二次:xmlhttp.readyState == 4; xmlhttp.status == 0;
Chrome控制台報告:
XMLHttpRequest cannot load http://google.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:50261' is therefore not allowed access.
問題是什么? 為什么我無法獲得成功的答復?
編輯#1
因此,問題在於google.com不支持CORS。 但是也許我可以朝另一個方向擴展這個問題。
我正在使用Fiddler在http://google.com上發送GET。 請求中沒有Origin標頭。 實際上,根本沒有指定頭。 請求已成功完成。 如何在不編寫和執行JS代碼的情況下測試網站是否支持CORS? 如何使用Fiddler測試同一件事?
編輯#2
我找到了一個網站 ,可以快速回答我的問題。 我還是想知道為什么它在Fiddler中不起作用。
readyState指示您的請求狀態。 readyState實質上等於“連接已建立”,而readyState則等於“請求完成”。
您的請求從1跳到4,因為您收到相同的原始策略錯誤。 如果您要執行適當的請求,則將包括狀態2和3(2:已收到標頭,3:正在接收響應正文)。
您的跨源請求進入了readyState 4,但實際上從未擁有200狀態。
有關更多信息: https : //developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.