如何从HttpWebResponse重定向?

时间:2016-05-04 16:03:54

标签: c# url redirect httpwebresponse

我正在尝试使用目前仅在.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完成处理页面时,最终的网址包含纬度和经度:

https://www.google.com/maps/dir//1+Microsoft+Way,+Redmond,+WA+98052/@47.6393095,-122.1327333,16z/data=!3m1!4b1!4m8!4m7!1m0!1m5!1m1!1s0x54906d73f7de150b:0x922499d19305e9a0!2m2!1d-122.1283559!2d47.6393096

我需要此网址的纬度和经度。

我在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)来电,但这并未改变任何内容。

我如何获得最终的重定向?

0 个答案:

没有答案