使用 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 C# .NET 获取 URL

这是因为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 响应。您对有效代码的检查必须相应地修改。