当前位置: 首页 > article >正文

C# HttpClient 实现HTTP Client 请求

为什么? C# httpclient get 请求和直接浏览器请求结果不一样

为了测试一下HTTP接口的,用C# HttpClient实现了HTTP客户端,用于从服务端获取数据。

但是遇到了问题:C# httpclient get 请求和直接浏览器请求结果不一样

初始代码如下:

            using var client = new HttpClient();
            // 发送GET请求并获取响应
            HttpResponseMessage response = await client.GetAsync(url);
            // 检查响应是否成功
            if (response.IsSuccessStatusCode)
            {
                // 读取响应内容
                string responseBody = await response.Content.ReadAsStringAsync();

                // 输出响应内容
                Console.WriteLine($"Response: {responseBody}");
            }
            else
            {
                Console.WriteLine($"Failed to make a GET request. Status code: {response.StatusCode}");
            }

但是,运行后返回的是不是url请求的数据,而是业务系统的登录页面

直接在浏览器中输入url ,返回的确是想要的真实数据。 这是为什么呢?

检查代码,发现请求时没有设置User-Agent,content-type,Cookie。于是查看浏览器请求时的相关信息。打开Request Headers页签, 找到Cookie, User-Agent

修改代码如下:

                // 创建 HttpRequestMessage 对象,并设置请求方法为 GET
                var request = new HttpRequestMessage(HttpMethod.Get, url);
  
                // 设置 User-Agent
                request.Headers.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36");
         
                // 设置 Content-Type
                // 注意:GET 请求通常不包含 Content-Type 头部,但如果服务器期望的话可以设置
                request.Headers.TryAddWithoutValidation("Content-Type", "application/json");
  
                // 设置 Cookie
                // 假设你有一个名为 ".ASPXAUTH" 的 cookie
                request.Headers.TryAddWithoutValidation("Cookie", ".AspNetCore.Antiforgery.ut3hBcs7PyQ=CfDJ8B39P6wWsIRNiIVDbsTXLHYufBdcmrCZYgxXr1sfyx46YXztgSQolAhsH0dQvCNgnzrXKdyc9R3r5FggSgv7cQs13W7VcmHWe55Gl0sUbptQdtWihufANnqPD4s4YNBpYdqucGCWCFVhhS0dZ4jMS2c; .AspNetCore.Session=CfDJ8B39P6wWsIRNiIVDbsTXLHad7R7YNnCk600Mi34VEhxV4ZRKSQpiugQ4mXnEXlwD30zfWYy8T5xwMu%2BNT0qLNOSyCW16sl9421rxi%2BYxttfnTY%2BSvbarpm1JbpLQHSD%2BTC3fCZG%2BtUtFp9KqCzPo2oW7l8Lnu47PL5fu9N4WYhJF");
         
                // 发送请求并获取响应
                HttpResponseMessage hresponse = await client.SendAsync(request);

编译代码,重新运行时,请求结果和浏览器直接调接口一致。


http://www.kler.cn/a/301819.html

相关文章:

  • 【Apache Paimon】-- 1 -- Apache Paimon 是什么?
  • 客厅打苍蝇fly测试总结1116
  • JMeter与大模型融合应用之JMeter日志分析服务化实战应用
  • # ubuntu 安装的pycharm不能输入中文的解决方法
  • c# Encoding.GetEncoding
  • 【数据库取证】快速从服务器镜像文件中获取后台隐藏数据
  • 智能体 vs AI智能体:区别与联系,一文读懂!
  • 【React+Ts+Vite+AntDesign】从0到1基础项目搭建(动态路由)
  • 【Python报错已解决】AttributeError: ‘str‘ object has no attribute ‘read‘
  • python学习之字符串操作
  • Spring统一功能+SpringAOP
  • 黑马头条第八天实战(上)
  • 【oj刷题】滑动窗口篇:滑动窗口的应用场景和注意事项
  • RTMP和WebRTC使用场景有哪些差别?
  • Anaconda 安装与使用教程
  • js TypeError: Cannot read property ‘initialize’ of undefined
  • SQL命令大全---超细【保姆级】
  • QT界面中的区域以及图像大小,想随着QT界面的放大缩小变化,如何实现?
  • 故障处理系列】elasticsearch 索引未正常分片导致集群状态异常如何分析处理
  • 【超详细】Plaxis软件简介、 Plaxis Python API环境搭建、自动化建模、Python全自动实现、典型岩土工程案例实践应用
  • YOLOV3实现越界检测——智能安防
  • 使用 Visual Studio Code 配置 C/C++ 开发环境
  • 无人机之遥控器工作频率篇
  • Java | Leetcode Java题解之第392题判断子序列
  • FreeRTOS学习笔记(十一)内存管理
  • 计算机的错误计算(九十一)