我試圖執行一些HEAD檢查使用System.Net.Http.HttpClient。除了301重定向之外,它對所有內容都很有用。在這種情況下,即使服務器說301並給了一個新的位置,HttpClient也會說狀態200。HttpClient忽略AllowAutoRedirect指令
這裏有一個快速測試來驗證我所看到的:
[Test]
public async void Test301Capture()
{
const string url = "http://www.youtube.com/"; // http://www.youtube.com/ does a 301 to https://www.youtube.com/
var httpClientHandler = new HttpClientHandler() { AllowAutoRedirect = false };
using (var client = new HttpClient(httpClientHandler))
using (var headRequest = new HttpRequestMessage(HttpMethod.Head, url))
using (var headResponse = await client.SendAsync(headRequest))
{
Log.InfoFormat("Result of HEAD check on \"{0}\" is: {1}", url, headResponse.StatusCode); // *should* be a 301
Assert.AreNotEqual(200, (int)headResponse.StatusCode); // *fails* because StatusCode *is* 200
}
}
從上面的輸出是:
Result of HEAD check on "http://www.youtube.com/" is: OK
我知道服務器是因爲使用先進的快速頭顱檢查說301 REST客戶端測試http://www.youtube.com/說:
Redirect
To:https://www.youtube.com/ with status: 301 Show explanation HTTP/1.1 301 Moved Permanently
Redirection information has not been cached.
Date: Tue, 01 Apr 2014 20:08:09 GMT
Server: gwiseguy/2.0
Content-Length: 0
Cache-Control: no-cache
X-Content-Type-Options: nosniff
Content-Type: text/html; charset=utf-8
Expires: Tue, 27 Apr 1971 19:44:06 EST
X-XSS-Protection: 1; mode=block; report=https://www.google.com/appserve/security-bugs/log/youtube
Location: https://www.youtube.com/
Alternate-Protocol: 80:quic
我沒有找到這個答案,Using HttpClient, how would I prevent automatic redirects and get original status code and forwading Url in the case of 301,但是我的結果是不同的。
結果:與PInvoke的@kyleb的經驗,並用自己的使用測試.NET插座(和野生野兔刺傷Python)說服我,301s的自動重定向被烘焙到Windows的低級聯網中。 – Bex