2012-05-22 31 views
-2

這是我通過「HttpWebRequest」和「HttpWebResponse」從瀏覽器獲取URL的代碼。爲什麼WebHttpRequest.ResponseUri不在C#中返回正確的URL

{ 
    string link="http://g.microsoftonline.com/0BXPS00id-id/1250"; 

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link); 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

    string responseurl = response.ResponseUri.ToString(); 

    Console.WriteLine(responseurl); 
} 

當我執行上述代碼的URL返回是

「https://mocp.microsoftonline.com/Site/Error.aspx?Err=NotSupported」

但是當我手動打開瀏覽器重定向鏈接

「https://mocp.microsoftonline.com/Site/Support.aspx」

爲什麼response.ResponseUri.ToString()返回錯誤的url?

您能否爲此提供解決方案?

+3

慷慨地吸引了UserAgent的上述值。只需在瀏覽器中打開https://mocp.microsoftonline.com/Site/Error.aspx?Err=NotSupported,就會看到。 –

+0

感謝,不僅此鏈接,但也有一些其他鏈接,從HttpWebresponse的網址返回不同於當我們手動打開瀏覽器中的鏈接 – arun

回答

0

通過request.UserAgent屬性,您可以充當支持的瀏覽器。 以下爲我工作

string link = "http://g.microsoftonline.com/0BXPS00id-id/1250"; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link); 
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

string responseurl = response.ResponseUri.ToString(); 
Console.WriteLine(responseurl) 

我不是在UserAgent的價值的專家。我慷慨地從https://stackoverflow.com/a/702110/455904

+0

謝謝,它的工作對於該鏈接,但我有一個與其他鏈接的問題,即使通過使用「 request.UserAgent」。 如果我使用上面的代碼的鏈接 [鏈接]「http://g.microsoftonline.com/0BXPS00id-id/1222」 它返回 「http://exchangeonline.pinpoint.microsoft.com /en-US/SelectCulture.aspx「 但是當我手動打開瀏覽器中的鏈接時,它顯示如下 」http://exchangeonline.pinpoint.microsoft.com/en-US/services/search/data-management -and-migration-b200025?WT.mc_id = ww_Perm_Deeplink_Office365__o365dl「 – arun

+0

我在第一個鏈接上得到301結果,這意味着它已被移動。重定向它後,可能會根據您的瀏覽器當前Cookie做出一些選擇。您可以使用IE開發人員工具(F12)跟蹤這些調用。之後,試着找出哪些cookie似乎做了這個技巧,並填寫request.CookieContainer與這些。 –

+0

我不擅長捕捉餅乾,所以你可以根據你的瀏覽器爲我提供代碼,那麼我會更好地瞭解這一點。 – arun

相關問題