2010-07-08 62 views
1

我有一個網址"http://mt0.google.com/vt/[email protected]&hl=en&x=11728&y=7595&z=14&s=Galileo"用於從Internet獲取Google Tiles。如果我從瀏覽器(任何)使用此Google Tile網址,我會成功獲取Google Tiles(地圖)。但問題是,如果我試圖訪問這個URL programmaticaly,我得到一個錯誤:HTTP 403禁止錯誤HTTP 403:通過C#程序訪問Google Tile時出現禁止錯誤

可能是什麼問題?我需要在我的程序中進行某種設置嗎?

我的代碼訪問URL如下:

byte[] imageBuffer = null; 
try 
{ 
     WebClient client = new WebClient(); 
     // It's a sample URL to get Tile from Google as on 29-06-2010     
     string url = "http://mt0.google.com/vt/[email protected]&hl=en&x=11728&y=7595&z=14&s=Galileo"; 
     imageBuffer = client.DownloadData(new Uri(url)); 
} 
catch (WebException we) 
{ 
    Debug.Print(we.Message); 
    return null; 
} 
return imageBuffer; 

在這裏,在catch塊,我得到HTTP 403的異常:禁止錯誤

回答

1

幾乎可以肯定,谷歌分析用戶請求的代理字符串,決定您不是瀏覽器,這意味着您可能是某種形式的Web Spider,並決定它不想浪費Web服務器時間來幫助其他一些Serach引擎。

您可以通過WebClient Headers屬性設置您的請求的用戶代理。

 client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 
+0

是的,它的工作..感謝您的詳細解釋。 我是否需要添加更適合的「用戶代理」,如使用的操作系統或安裝在機器或其他類型的瀏覽器? – 2010-07-09 04:39:14

3

這可能是因爲您沒有設置用戶代理。嘗試添加下面這行代碼:

client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)") 

看看是否修復它!

+0

是的,它的工作..謝謝你的詳細解釋。我是否需要添加更適合的「用戶代理」,如使用的操作系統或安裝在機器或其他類型的瀏覽器? – 2010-07-09 04:40:00

+0

你可以,如果你想要,但真的沒關係,如果你所要做的只是訪問一個圖像。 – Icemanind 2010-07-09 14:49:59

1

直接訪問磁貼違反了Google地圖服務條款。您應該考慮使用Google Static Maps API

+0

我同意..但我只需要使用Google Tile Server,因爲性能問題。此外,您是否有任何關於Google Tile Server的文檔,例如在縮放和平移時將屏幕座標轉換爲實際的經度,緯度和地圖屏幕座標? 感謝 – 2010-07-09 04:44:36

+1

再次強調一點,直接訪問磁貼違反了Google地圖服務條款。 – Ossama 2010-07-12 20:29:55

相關問題