Leaf.xNet如何按Cookie名称解析为变量 可使用SubString方法实现
实现逻辑
核心是直接从响应的Set-Cookie头原始文本中定位目标Cookie的位置,再通过SubString截取对应值:
- 先从HttpResponse的响应头中读取所有
Set-Cookie的原始内容 - 检索目标Cookie名加等号的字符串下标,确认Cookie存在
- 跳过Cookie名称和等号,定位到Cookie值的起始下标
- 查找Cookie值的结束标识(通常为分号,分隔Cookie属性,若没有则取字符串末尾)
- 调用SubString截取起始到结束位置的内容,赋值为变量
完整代码示例
using Leaf.xNet; using System; namespace CookieExtractDemo { class Program { static void Main(string[] args) { using (var httpRequest = new HttpRequest()) { // 发送HTTP请求获取响应 HttpResponse httpResp = httpRequest.Get("https://example.com"); // 配置要提取的目标Cookie名称 string targetCookie = "uid"; string cookieValue = string.Empty; // 读取Set-Cookie头原始内容 string rawCookieHeader = httpResp.Headers["Set-Cookie"] ?? ""; // SubString解析核心逻辑 int namePos = rawCookieHeader.IndexOf($"{targetCookie}="); if (namePos != -1) { // 定位值的起始位置(跳过Cookie名和等号) int valStart = namePos + targetCookie.Length + 1; // 定位值的结束位置 int valEnd = rawCookieHeader.IndexOf(';', valStart); valEnd = valEnd == -1 ? rawCookieHeader.Length : valEnd; // 截取Cookie值 cookieValue = rawCookieHeader.Substring(valStart, valEnd - valStart); } // 测试输出 Console.WriteLine($"提取到的{targetCookie}值:{cookieValue}"); } } } }
补充说明
若没有强制要求必须用SubString实现,Leaf.xNet自带的Cookie容器已经封装了成熟的解析逻辑,可以直接调用:
cookieValue = httpRequest.Cookies.GetCookies("https://example.com")[targetCookie]?.Value ?? "";
该方式无需自己处理下标计算,适配多Cookie、特殊Cookie值的场景稳定性更高。
内容的提问来源于stack exchange,提问作者user15980236
相关产品推荐
相关产品推荐

