Я хочу использовать API Карт Google для геокодирования/обратного геокодирования координат/адресов. Для этого я использую экземпляр класса Webclient C#.Остановить веб-клиент от экранирующих строк
static string gMapsUrl= "http://maps.googleapis.com/maps/api/geocode/xml?address= {0}&sensor=false";
public static List<Location> RetrieveCoordinate(string address)
{
string requestUri = string.Format(gMapsUrl, address);
string result = string.Empty;
using (var client = new WebClient())
{
client.Encoding = System.Text.Encoding.UTF8;
result = client.DownloadString(requestUri);
}
....
}
Это обычно работает, однако позволяет сказать, что я хочу обратного геокодирования адрес «Götznerstraße». Если бы я сделать это вручную в браузере, все работает отлично, URL запроса будет
http://maps.googleapis.com/maps/api/geocode/xml?address=götznerstraße&sensor=false
Окончательный запрос из моей программы, однако выглядит эта
GET /maps/api/geocode/xml?address=G%C3%B6tznerstra%C3%9Fe&sensor=false HTTP/1.1
Это приводит к Google найти не Матчи. Мне кажется, что веб-клиент где-то избегает умлаут, что мешает мне получать результаты. Есть ли способ остановить веб-клиента от этого или заставить Google снова игнорировать строку?
EDIT: Я решил, что после сравнения запроса с браузером и моей программой я понял, что мой браузер отправляет некоторые дополнительные заголовки. Измененная реализация выглядит так:
using (var client = new WebClient())
{
client.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
client.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
client.Headers.Add("Accept-Language", "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4");
client.Encoding = System.Text.Encoding.UTF8;
result = client.DownloadString(requestUri);
}
Большое спасибо всем, кто помог!
Возможно, браузер просто автоматически переводит его обратно, чтобы сделать его более читаемым. –
Если вы открываете режим разработчика в своем браузере по выбору (например, Ctrl + shift + I в Chrome), вы увидите, что URL-адрес в фактическом запросе HTTP GET всегда кодируется в процентах. Я бы использовал [Fiddler] (http://www.telerik.com/fiddler) и сравнивал фактические HTTP-запросы рабочего браузера и вашего приложения. – Groo
Спасибо вам обоим Уве и Гроо, я сравнил эти два запроса и увидел, что в запросе моей программы отсутствовали некоторые заголовки! – user3239482