理解题意:本文旨在介绍如何利用 HttpClient 在网页发生重定向后获取最终网址信息的方法。本文将会提供两个示例帮助理解这个过程。
理解题意:本文旨在介绍如何利用 HttpClient 在网页发生重定向后获取最终网址信息的方法。本文将会提供两个示例帮助理解这个过程。
使用 HttpClient 获取重定向后的网址信息
在 HttpClient 中,针对重定向的处理分为两种:
- 允许重定向,并自动地重定向到最终站点,该方式称为自动重定向。
- 禁止重定向,返回非重定向的响应码,并在响应消息头中提供重定向的信息,称之为手动重定向。
除此之外,还可以通过继承 HttpClientHandler 对象来自定义重定向的处理方式。
以下是两个示例,用于介绍在 HttpClient 中如何获取重定向后的网址信息。
示例一:使用自动重定向方式获取网址信息
在使用 HttpClient 发送 GET 请求时,若对于重定向的处理方式选择了自动重定向,则在调用 GetStringAsync()
方法后,HttpClient 可以自动地重定向到最终站点,从而通过 HttpResponseMessage
对象的 RequestMessage
属性获取重定向后的网址信息。以下是示例代码:
using System.Net.Http;
using System.Threading.Tasks;
public async Task<string> GetRedirectUrlAuto(string requestUrl)
{
var handler = new HttpClientHandler {AllowAutoRedirect = true};
var client = new HttpClient(handler);
var response = await client.GetAsync(requestUrl);
var requestMessage = response.RequestMessage;
if (requestMessage != null)
{
return requestMessage.RequestUri.AbsoluteUri;
}
return string.Empty;
}
在上述代码中,我们创建了一个 HttpClient 对象,并指定了 HttpClientHandler 对象的 AllowAutoRedirect
属性为 true,以允许使用自动重定向方式。随后,我们发起 GET 请求,并在请求完成后获取 HttpResponseMessage
对象。通过查看 RequestMessage
属性,我们可以获取到最终的网址信息。
示例二:使用手动重定向方式获取网址信息
在使用 HttpClient 发送 GET 请求时,若对于重定向的处理方式选择了禁止重定向,可以获取到重定向的响应码和重定向的信息,再根据重定向的信息进行手动处理,并最终获取到重定向后的网址信息。以下是示例代码:
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
public async Task<string> GetRedirectUrlManual(string requestUrl)
{
var handler = new HttpClientHandler
{
AllowAutoRedirect = false, // 禁用自动重定向
};
var client = new HttpClient(handler);
var response = await client.GetAsync(requestUrl);
if (response.StatusCode == HttpStatusCode.Redirect || response.StatusCode == HttpStatusCode.RedirectKeepVerb || response.StatusCode == HttpStatusCode.RedirectMethod)
{
var redirectUrl = response.Headers.Location?.ToString();
if (!string.IsNullOrWhiteSpace(redirectUrl))
{
return redirectUrl;
}
var content = await response.Content.ReadAsStringAsync();
if (!string.IsNullOrWhiteSpace(content))
{
var parts = content.Split(';');
if (parts.Length > 0)
{
var urlPart = parts.FirstOrDefault(p => p.ToLower().StartsWith("url="));
if (!string.IsNullOrWhiteSpace(urlPart))
{
redirectUrl = WebUtility.HtmlDecode(urlPart.Substring(4));
if (!string.IsNullOrWhiteSpace(redirectUrl))
{
return redirectUrl;
}
}
}
}
}
return string.Empty;
}
在上述代码中,我们创建了一个 HttpClient 对象,并指定了 HttpClientHandler 对象的 AllowAutoRedirect
属性为 false,以禁用自动重定向方式。随后,我们发起 GET 请求,并在请求完成后获取 HttpResponseMessage
对象。根据重定向的响应码和重定向的信息,我们可以通过 response.Headers.Location
属性或者在响应体中提取到网址信息。
以上两个示例可以帮助您了解如何在发生重定向后获取到最终的网址信息。值得注意的是,该过程中需要根据不同的重定向方式选择不同的处理方式。
本文标题为:httpclient重定向之后获取网址信息示例
基础教程推荐
- Jsp页面实现文件上传下载类代码第2/2页 2023-12-15
- SpringCloud集成Hystrix熔断过程分步分解 2023-06-02
- Java设计模式中的桥接模式 2023-03-11
- Mybatis Log Plugin的使用方式 2022-10-24
- JSP中param动作的实例详解 2023-07-31
- Java效率提升神器之Guava-Joiner 2023-02-19
- Java中ArrayList和SubList的坑面试题 2022-11-11
- Java实现扫雷游戏详细代码讲解 2022-11-08
- 关于iframe的一点发现与思考 2023-12-16
- SpringBoot响应处理之以Json数据返回的实现方法 2023-06-05