2010-07-08 10 views
1

J'ai une URL "http://mt0.google.com/vt/[email protected]&hl=en&x=11728&y=7595&z=14&s=Galileo" utilisée pour aller chercher Google Tiles à partir d'Internet. Si j'utilise cette URL de Google Tile du navigateur (n'importe quel), j'obtiens avec succès les tuiles de Google (carte). Mais le problème est, si j'essaie d'accéder à cette URL programmatique, je reçois une erreur: HTTP 403 Erreur interdite.HTTP 403: Erreur interdite lors de l'accès à Google Tile via un programme C#

Quel pourrait être le problème? Ai-je besoin de faire un réglage dans mon programme?

Mon code pour accéder à l'URL est la suivante:

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; 

Ici, dans le bloc catch je reçois une exception de HTTP 403: erreur interdite

Répondre

1

Presque certainement, Google analyse actuellement l'utilisateur Agent chaîne de la requête, décidant que vous n'êtes pas un navigateur, ce qui signifie que vous êtes probablement une certaine forme d'araignée Web, et décide qu'il ne veut pas gaspiller le temps du serveur Web en aidant un autre moteur de recherche.

Vous pouvez définir l'agent utilisateur de votre demande via la propriété WebClient Headers.

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

Oui, cela fonctionne .. Merci pour une explication détaillée. Ai-je besoin d'ajouter un "user-agent" plus approprié comme le système d'exploitation utilisé ou le type de navigateur installé dans la machine ou autre chose? –

3

C'est probablement parce que vous ne définissez pas d'agent utilisateur. Essayez d'ajouter cette ligne de code:

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

Voir si cela le répare!

+0

Oui, cela fonctionne .. Merci pour une explication détaillée. Ai-je besoin d'ajouter un «user-agent» plus approprié comme OS utilisé ou type de navigateur installé dans la machine ou autre chose? –

+0

Vous pouvez si vous voulez, mais vraiment ce n'est pas grave, si tout ce que vous essayez de faire est d'accéder à une image. – Icemanind

1

L'accès direct aux carreaux est contraire aux conditions d'utilisation de Google Maps. Vous devriez envisager d'utiliser le Google Static Maps API à la place.

+0

Je suis d'accord ... mais je devais utiliser Google Tile Server uniquement en raison de problèmes de performances. De plus, avez-vous de la documentation sur Google Tile Server comme la conversion des coordonnées de l'écran en coordonnées réelles de longitude, de latitude et de cartographie lors du zoom et du panoramique? Merci –

+1

Encore une fois, permettez-moi d'insister sur ce point, l'accès direct aux tuiles est contraire aux Conditions d'utilisation de Google Maps. – Ossama