2017-02-23 95 views
2

我試圖解析一個wikispaces頁面,但我無法獲得實際的頁面。我不確定它是一個HttpClient錯誤還是一些缺失的配置。即使AllowAutoRedirect = true,HttpClient也不會重定向

這是我的代碼:

HttpClientHandler handler = new HttpClientHandler(); 
handler.AllowAutoRedirect = true; 
_httpClient = new HttpClient(handler); 

HttpResponseMessage response = await _httpClient 
    .GetAsync("http://medivia.wikispaces.com/Monsters"); 

當我運行的代碼我得到的StatusCode 302和送送https://session.wikispaces.com/1/auth/auth?authToken=token。我期望HttpClient遵循302,因爲我有AllowAutoRedirect = true

這是我第一次遇到這個問題。它適用於Postman和RestClient,它是RestSharp的一部分。

+0

爲什麼不使用WebClient? –

+1

我不確定我是否理解它,但如果你不想遵循重定向,你可以簡單地設置handler.AllowAutoRedirect = false;''' – giubueno

+0

@LeiYang因爲'WebClient'是舊的,可​​怕的,需要死一個討厭的,痛苦的死亡! – DavidG

回答

3

HttpClient不能正確重定向的原因是因爲該站點將您重定向到HTTPS,然後返回到HTTP。速戰速決是讓https://medivia.wikispaces.com/Monsters代替,這無論如何是一個更好的主意:

HttpResponseMessage response = await _httpClient.GetAsync("https://medivia.wikispaces.com/Monsters"); 
// Works fine! :) 

我很好奇,爲什麼它沒有工作的第一種方式,所以我挖得更深一些。如果你看網絡跟蹤在瀏覽器或網絡客戶端,這是發生了什麼:

GET http://medivia.wikispaces.com/Monsters 
302 https://session.wikispaces.com/1/auth/auth?authToken=token 
302 http://medivia.wikispaces.com/Monsters?redirectToken=token 

這302從加密(HTTPS)連接到未加密的一個原因造成的HttpClientHandler自動停止以下。據我所知,這是Windows implementation of HttpClientHandler的一個安全漏洞,因爲在我的非正式測試中,Unix one似乎並不關心HTTPS-> HTTP重定向。

+0

不錯,不知道這是甚至一件事謝謝! – Diego

相關問題