1

我有一个"http://mt0.google.com/vt/lyrs=m@129&hl=en&x=11728&y=7595&z=14&s=Galileo"用于从 Internet 获取 Google Tiles 的 URL。如果我从浏览器(任何)使用这个 Google Tile URL,我成功地获得了 Google Tiles(地图)。但问题是,如果我尝试以编程方式访问此 URL,我会收到 Error: HTTP 403 Forbidden Error

可能是什么问题呢?我需要在我的程序中进行某种设置吗?

我访问 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/lyrs=m@129&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 异常:禁止错误

4

3 回答 3

3

这可能是因为您没有设置用户代理。尝试添加这行代码:

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

看看能不能解决!

于 2010-07-08T20:08:27.737 回答
1

几乎可以肯定的是,谷歌正在分析请求的用户代理字符串,确定你不是浏览器,这意味着你可能是某种形式的网络蜘蛛,并决定它不想浪费网络服务器时间来帮助其他搜索引擎。

您可以通过 WebClientHeaders属性设置请求的用户代理。

        client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
于 2010-07-08T20:04:51.927 回答
1

直接访问图块违反了 Google 地图服务条款。您应该考虑改用Google 静态地图 API

于 2010-07-08T23:11:48.733 回答