我想使用Google Maps API來轉換地理編碼/反向地理編碼座標/地址。爲此,我使用C#的webclient類的一個實例。從轉義字符串中停止webclient
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
這導致谷歌發現沒有火柴。對我來說,看起來好像webclient在某個地方逃跑了,這阻止了我獲得結果。有沒有辦法阻止Web客戶端這樣做,或讓Google再次使用字符串?
編輯: 我解決了它,在比較了來自瀏覽器和我的程序的請求後,我意識到我的瀏覽器正在發送一些額外的頭文件。改變的實施看起來像這樣
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);
}
非常感謝所有幫助過的人!
可能瀏覽器只是自動將它翻譯回給你,使其更具可讀性。 –
如果您在選擇的瀏覽器中打開開發人員模式(例如,Chrome上的Ctrl + shift + I),則會看到實際HTTP GET請求中的URL始終是百分比編碼的。我會使用[Fiddler](http://www.telerik.com/fiddler)並比較工作瀏覽器和您的應用程序的實際HTTP請求。 – Groo
感謝你們Uwe和Groo,我比較了這兩個請求,並看到我的程序所做的請求丟失了一些頭文件! – user3239482