文章

C#强制设置Header

C# HttpClient强制设置Header

C#强制设置Header

C#强制设置Header

前言

为什么要发这样一篇笔记?

因为我无语了

很早之前我就发现了某软件的UA并不合规,我不确定为什么,但是被卡在UA + 他们返回的错误信息根本不对后,我还是决定写这么一篇笔记

解决方案

使用TryAddWithoutValidation

这样可以跳过对Header的验证,直接设置对应的Header

1
2
3
4
using (HttpClient client = new HttpClient()){
    //client.DefaultRequestHeaders.Add("User-Agent", UserAgent);
    client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", UserAgent);
}

User Agent合法格式

你可以在Mozilla Web Docs这里找到官方对于UA的格式定义

User-Agent 请求标头是一个特征字符串,使得服务器和对等网络能够识别发出请求的用户代理的应用程序、操作系统、供应商或版本信息

通用格式:

1
<product> / <product-version> <comment>
字段描述
<product>产品标识符——其名称或开发代号
<product-version>产品版本号
<comment>零个或多个包含更多细节的注释。例如,子产品的信息

Web浏览器的格式为:

1
Mozilla/5.0 (<system-information>) <platform> (<platform-details>) <extensions>

示例:

1
2
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0

某软件的UA

再来看看某软件的UA

1
netdisk;P2SP;3.0.20.63;netdisk;7.46.5.113;PC;PC-Windows;10.0.22631;WindowsXxxxxXxxGuanJia

兄啊,这啥啊,这啥也不是

兄啊,这啥啊,这啥也不是

兄啊,这啥啊,这啥也不是

HTTP协议是你家自研的?就算是,能不能改成这样?

1
netdisk/3.0.20.63 (Windows NT 10.0.22631; Win64; x64) WindowsXxxxxXxxGuanJia/7.46.5.113 P2SP/3.0.20.63
本文由作者按照 CC BY 4.0 进行授权