我正在尝试使用目前仅在.Net Framework 4.0的项目从Google地图获取重定向。
以微软的邮寄地址为例:
1 Microsoft Way,Redmond,WA
使用 Plus <格式化替换 Spaces ,逗号 ,的字符串kbd> + 标志:
https://www.google.com/maps?daddr=1+microsoft+way+redmond+wa
当Google完成处理页面时,最终的网址包含纬度和经度:
我需要此网址的纬度和经度。
我在SO上发现了这篇文章:
Get a collection of redirected URLs from HttpWebResponse
在那里使用解决方案,我创建了这个非常相似的方法:
private String latitude, longitude;
private void GetLatLongFromAddress(String p_street_name, String p_city, String p_state, String p_postal_code)
{
var street_name = String.Format("{0}", p_street_name.Replace(' ', '+')).Trim();
var city = String.Format("{0}", p_city).Trim();
var state = String.Format("{0}", p_state).Trim();
var postal_code = String.Format("{0}", p_postal_code).Trim();
var mapUrl = String.Format("http://maps.google.com/?daddr={0}+{1}+{2}+{3}",
street_name, city, state, postal_code);
var location = String.Copy(mapUrl);
while (!String.IsNullOrEmpty(location))
{
var req1 = (HttpWebRequest)HttpWebRequest.Create(location);
req1.AllowAutoRedirect = false;
// give page time to redirect?
// System.Threading.Thread.Sleep(5000);
using (var resp = (HttpWebResponse)req1.GetResponse())
{
location = resp.GetResponseHeader("Location");
if (!String.IsNullOrEmpty(location))
{
var postalIndex = location.IndexOf(postal_code);
var slashAtIndex = location.IndexOf("/@") + 1;
if ((postalIndex < slashAtIndex) && (slashAtIndex < location.Length))
{
var split = location.Substring(slashAtIndex).Split(',');
latitude = split[0];
longitude = split[1];
}
}
}
}
}
您可以使用以下行查看我格式化原始网址的位置:
var mapUrl = String.Format("http://maps.google.com/?daddr={0}+{1}+{2}+{3}",
street_name, city, state, postal_code);
问题在于这一行:
location = resp.GetResponseHeader("Location");
每次收到回复时,返回的location
值都与我开始使用的mapUrl
值相同,因为Google不会立即重定向。
我尝试添加Sleep(5000)来电,但这并未改变任何内容。
我如何获得最终的重定向?