记一次HttpClient使用问题分析

news/2024/9/21 1:13:24

问题

问题是这样的:第三方的webapi,需要先调用登陆接口获取Cookie,访问其它接口时携带Cookie信息。

但使用HttpClient类调用登陆接口,返回的Headers中没有找到Cookie信息。

分析

首先,使用Postman测试该登陆接口,正常返回Cookie信息,说明是HttpClient访问接口出了问题。

通过调试发现,明明使用的Post请求,返回的HttpResponseMessage却显示为GET请求。

下载WireShark网络分析工具,抓包发现,Post请求返回了302,且返回中是携带了Cookie信息的,随即又进行了GET请求到重定向的地址,返回的信息中没有Cookie。302表示请求的资源已被临时移动到另一个位置,客户端应该重定向到的新位置。因此,可以知道是HttpClient自动进行了重定向。

解决

方法也很简单,对于登陆接口,直接禁用自动跟随重定向即可:

public async Task<HttpResponseMessage> PostAuthAsync(string url, CancellationToken cancellationToken = default(CancellationToken))
{using var httpClientHandler = new HttpClientHandler(){// 禁用自动跟随重定向AllowAutoRedirect = false};using HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);using var client = new HttpClient(httpClientHandler);return await client.SendAsync(request, cancellationToken);
}

从返回中获取指定的Cookie信息:

string GetCookieFromResponseHeader(HttpResponseHeaders headers)
{if (headers.TryGetValues("Set-Cookie", out IEnumerable<string> setCookieHeaders)){foreach (var headerValue in setCookieHeaders){foreach (var cookieHeader in headerValue.Split(';')){var parts = cookieHeader.Split('=');if (parts.Length == 2 && parts[0] == cookieName)return parts[1];}}}return string.Empty;
}

访问其它接口时,添加Cookie信息:

public async Task<HttpResponseMessage> PostAsync(string url, string cookie, string jsonData, CancellationToken cancellationToken = default(CancellationToken))
{var content = new StringContent(jsonData, Encoding.UTF8, "application/json");var httpClient = _httpClientFactory.CreateClient();string cookieHeader = $"{cookieName}={cookie}";httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Cookie", cookieHeader);return await httpClient.PostAsync(url, content, cancellationToken);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/62789.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

游戏技术

目录显示相关的术语每个帧的像素:分辨率多个帧的刷新:刷新率、帧率每个像素的颜色编码码率显卡渲染技术DLSS2 牺牲画质 提高帧率DLSS3 进一步提高帧率 刷新更流畅 显示相关的术语 每个帧的像素:分辨率 分辨率 = 水平宽度的像素数(列数) x 垂直高度的像素数(行数)速记 分辨率…

基于双闭环PI的SMO无速度控制系统simulink建模与仿真

1.课题概述基于双闭环PI的SMO无速度控制系统simulink建模与仿真,基于双闭环PI的SMO无速度控制系统主要由两个闭环组成:一个是电流环,另一个是速度环。电流环作为内环,主要负责电流的快速跟踪控制;速度环作为外环,负责速度的精确控制。这种双闭环结构可以有效提高系统的动…

基于ACO蚁群优化的UAV最优巡检路线规划算法matlab仿真

1.程序功能描述 基于ACO蚁群优化法的UAV最优巡检路线规划。蚁群优化算法源于对自然界蚂蚁寻找食物路径行为的模拟。在无人机巡检路线规划问题中,无人机被认为是“蚂蚁”,巡检点视为“食物源”,目标是找到一条总距离(或总能耗、总时间等)最短的巡检路线。 2.测试软件…

痞子衡嵌入式:如果i.MXRT离线无法启动,试着分析ROM启动日志

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT系列MCU的ROM启动日志。关于 i.MX RT 启动问题解决的文章,痞子衡写过非常多,其中大部分都是具体到某一类启动设备下的具体问题分析,比较依赖经验,这些经验当然是非常有用的。此外也有一篇 《…

基于A律压缩的PCM脉冲编码调制通信系统simulink建模与仿真

1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)4.算法理论概述脉冲编码调制(Pulse Code Modulation, PCM)是一种将模拟信号转换为数字信号的通信技术,广泛应用于电话通信、音频…

室内导航的界面该如何设计

室内导航的界面该如何设计?发点例子你看看

【笔记】机器学习算法在异常网络流量监测中的应用

这段时间在找方向,又看不懂文章,只能先从一些相对简单的综述类看起,顺便学学怎么写摘要相关工作的。机器学习算法在异常网络流量监测中的应用 原文:Detecting Network Anomalies in NetFlow Traffic with Machine Learning Algorithms 原文链接:Detecting Network Anomali…