3.28地址与浏览器标识
当需要对接多个第三方 API 时,我们通常会全局注册并配置多个 HttpClient 实例的 BaseAddress。例如:
配置请求基地址#
当需要对接多个第三方 API 时,我们通常会全局注册并配置多个 HttpClient 实例的 BaseAddress。例如:
// 配置默认客户端的基地址services.AddHttpClient(string.Empty, client =>{ client.BaseAddress = new Uri("https://furion.net/");});// 配置GitHub客户端的基地址services.AddHttpClient("github", client =>{ client.BaseAddress = new Uri("https://github.com/");});随后可通过 .SetHttpClientName(客户端名称) 方法指定要使用的客户端。
除了全局配置,框架还支持在单次请求中局部设置基地址的方法,允许在构建请求时动态指定:
// 使用字符串设置基地址HttpRequestBuilder.Get("/api/test") .SetBaseAddress("https://furion.net");// 使用 Uri 对象设置基地址HttpRequestBuilder.Get("/api/test") .SetBaseAddress(new Uri("https://furion.net"));// 可充当前缀使用HttpRequestBuilder.Get("/api/test") .SetBaseAddress("/furion");处理逻辑说明:
- 若请求地址为绝对地址,则直接使用该地址发送请求。
- 若请求地址为相对地址:
- 未设置局部
BaseAddress时,将其与全局HttpClient实例的BaseAddress拼接,作为最终请求地址。 - 已设置局部
BaseAddress时:- 若局部
BaseAddress为相对地址,则先将局部BaseAddress拼接到请求地址前,再与全局BaseAddress拼接。 - 若局部
BaseAddress为绝对地址,则直接将该绝对地址与请求地址拼接,作为最终请求地址(此时忽略全局BaseAddress)。
- 若局部
- 未设置局部
配置来源地址 Referer#
当访问某些第三方服务器时,服务器可能会验证请求头中的 Referer 来源地址。例如在下载图片时,可能因触发防盗链机制导致获取的图片不符合预期。此时,可通过 SetReferer 方法来设置 Referer 请求头,模拟来源页面以绕过防盗链检测。
HttpRequestBuilder.Get("https://furion.net/logo.png") .SetReferer("https://furion.net/"); // 伪造是从首页发出的请求为简化配置,框架提供了内置模板字符串 "{BASE_ADDRESS}",可自动提取请求地址的基地址作为 Referer:
HttpRequestBuilder.Get("https://furion.net/logo.png") .SetReferer("{BASE_ADDRESS}"); // 发送时自动替换 {BASE_ADDRESS} 为 https://furion.net/配置 User-Agent#
User-Agent 请求标头是一个特征字符串,使得服务器和对等网络能够识别发出请求的用户代理的应用程序、操作系统、供应商或版本信息。框架提供了 SetUserAgent 方法来设置 User-Agent 请求头。
HttpRequestBuilder.Get("https://furion.net/logo.png") .SetUserAgent(UserAgents.Chrome.PC) // 使用 UserAgents 静态类便捷设置 .SetUserAgent(UserAgents.Chrome.Mobile) // 设置为移动端 User-Agent .SetUserAgent(UserAgents.GetRandom()) // 随机获取一个浏览器类型的 User-Agent .SetUserAgent(UserAgents.GetByBrowser("Safari")) // 获取指定浏览器类型的 User-Agent .SetUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36"); // 或直接设置 User-Agent 字符串UserAgents 是框架提供的静态类,用于便捷设置主流浏览器的 User-Agent 标识,包含以下成员:
-
静态方法:
GetRandom(isMobile): 随机获取一个浏览器的User-Agent。GetByBrowser(browser, isMobile):获取指定浏览器类型的User-Agent。
-
静态成员:
Chrome:Google Chrome 浏览器PC:桌面端User-Agent标识Mobile:移动端User-Agent标识
Firefox:Mozilla Firefox 浏览器PC:桌面端User-Agent标识Mobile:移动端User-Agent标识
Safari:Apple Safari 浏览器PC:桌面端User-Agent标识Mobile:移动端User-Agent标识
Edge:Microsoft Edge 浏览器PC:桌面端User-Agent标识Mobile:移动端User-Agent标识
Opera:Opera 浏览器PC:桌面端User-Agent标识Mobile:移动端User-Agent标识
Generic:通用浏览器PC:桌面端User-Agent标识Mobile:移动端User-Agent标识
配置 HTTP 版本#
在发起 HTTP 远程请求时,默认采用的 HTTP 协议版本为 1.1。不过,在访问部分第三方服务器时,这些服务器可能会对 HTTP 版本进行校验(例如,要求使用 2.0 版本)。此时,可以通过以下两种方式进行设置:
- 单次请求设置
HttpRequestBuilder.Post("https://furion.net/") .SetVersion(HttpVersion.Version20); // 推荐 .SetVersion("1.2"); // 重载方法 .SetVersion(new Version("1.2")); // 重载方法- 全局配置
// 配置默认客户端services.AddHttpClient(string.Empty, client =>{ client.DefaultRequestVersion = HttpVersion.Version10;});// 配置特定客户端services.AddHttpClient("weixin", client =>{ client.DefaultRequestVersion = HttpVersion.Version10;});