C# HttpClient检测重定向

4

我需要检测是否存在重定向。我的第一个想法是检查状态代码是否为301,但对于:

var link = "https://grnh.se/8dc368b82us?s=LinkedIn&source=LinkedIn";
var responseMessage = await httpClient.GetAsync(link);

responseMessage返回"OK",但在浏览器中,此链接返回301并重定向。

链接重定向

如果我不能依赖这个,那么我决定只比较请求URI和响应URI。

GetAsync返回一个Task<HttpResponseMessage>,但HttpResponseMessage没有响应URI的属性。

https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0

System.Net.WebResponse包含响应URI的属性,但我可以在HttpClient中使用它吗?还是必须使用WebRequest来发送请求?

https://learn.microsoft.com/en-us/dotnet/api/system.net.webresponse?view=net-5.0

有更好的方法吗?

注意:这将扫描数百万个链接,因此我更喜欢实例化一个HttpClient。Microsoft建议使用HttpClient而不是WebRequest:https://learn.microsoft.com/en-us/dotnet/api/system.net.webresponse?view=net-5.0

1个回答

10

您可以像以下方式禁用自动重定向:

var httpClient = new HttpClient(new HttpClientHandler { AllowAutoRedirect = false });
var link = "https://grnh.se/8dc368b82us?s=LinkedIn&source=LinkedIn";
var responseMessage = await httpClient.GetAsync(link);

您可以通过与常见的重定向代码比较responseMessage.StatusCode来检查重定向:

MovedPermanently = 301
Redirect = 302
TemporaryRedirect = 307

新位置将在responseMessage.Headers.Location中,如果需要,您可以再次请求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接