使用 HttpClient C# .NET 获取 URL
本文关键字:获取 URL NET HttpClient 使用 | 更新日期: 2023-09-27 18:32:05
我正在尝试使用HttpClient获取页面的URL。我以前只使用过HttpWebRequest,但我需要将其设置为异步方法。在下面的代码中,myUri 总是返回 null,这会导致在我稍后尝试处理它时抛出异常。
位置标题使用错误吗?
string myUrl = "http://www.example.com/";
Uri myUri= new Uri(myUrl);
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(myUri))
{
if (response.IsSuccessStatusCode)
{
myUri= response.Headers.Location;
Debug.WriteLine("True "+ myUri);
}
else {
Debug.WriteLine("False " + myUri);
}
}
这是因为HttpClient
会自动跟随重定向。如果您需要页面重定向到的URL,则需要阻止它自动跟随:
将代码更改为以下内容:
string myUrl = "http://www.example.com/";
Uri myUri= new Uri(myUrl);
HttpClientHandler httpClientHandler = new HttpClientHandler();
httpClientHandler.AllowAutoRedirect = false;
using (HttpClient client = new HttpClient(httpClientHandler))
以下是解析最终重定向 URL 的异步方法:
public static async Task<string> ResolveFinalRedirectAsync(string url)
{
try
{
var req = WebRequest.CreateHttp(url);
req.AllowAutoRedirect = true;
var res = await req.GetResponseAsync();
return res.ResponseUri.AbsoluteUri;
}
catch
{
Console.WriteLine("Couldn't resolve '{0}'", url);
}
return null;
}
请参阅@Rob关于 AllowAutoRedirect 的回答。
完成此操作后,请注意
该行
if (response.IsSuccessStatusCode)
如果收到 HTTP 301 重定向(200-299 范围之外的任何内容),则计算为 false。
指示 HTTP 响应是否成功的值。如果 HttpStatusCode 在成功范围 (200-299) 内,则为 true;否则为 false。
(来源)
好的,谢谢,无论如何我都在尝试获取重定向的URL
如果您阻止自动跟踪重定向,您将获得重定向的 3xx 范围内的 HTTP 响应。您对有效代码的检查必须相应地修改。