• C# HttpClient 实现HTTP Client 请求


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

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

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

    初始代码如下:

    1. using var client = new HttpClient();
    2. // 发送GET请求并获取响应
    3. HttpResponseMessage response = await client.GetAsync(url);
    4. // 检查响应是否成功
    5. if (response.IsSuccessStatusCode)
    6. {
    7. // 读取响应内容
    8. string responseBody = await response.Content.ReadAsStringAsync();
    9. // 输出响应内容
    10. Console.WriteLine($"Response: {responseBody}");
    11. }
    12. else
    13. {
    14. Console.WriteLine($"Failed to make a GET request. Status code: {response.StatusCode}");
    15. }

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

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

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

    修改代码如下:

    1. // 创建 HttpRequestMessage 对象,并设置请求方法为 GET
    2. var request = new HttpRequestMessage(HttpMethod.Get, url);
    3. // 设置 User-Agent
    4. 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");
    5. // 设置 Content-Type
    6. // 注意:GET 请求通常不包含 Content-Type 头部,但如果服务器期望的话可以设置
    7. request.Headers.TryAddWithoutValidation("Content-Type", "application/json");
    8. // 设置 Cookie
    9. // 假设你有一个名为 ".ASPXAUTH" 的 cookie
    10. request.Headers.TryAddWithoutValidation("Cookie", ".AspNetCore.Antiforgery.ut3hBcs7PyQ=CfDJ8B39P6wWsIRNiIVDbsTXLHYufBdcmrCZYgxXr1sfyx46YXztgSQolAhsH0dQvCNgnzrXKdyc9R3r5FggSgv7cQs13W7VcmHWe55Gl0sUbptQdtWihufANnqPD4s4YNBpYdqucGCWCFVhhS0dZ4jMS2c; .AspNetCore.Session=CfDJ8B39P6wWsIRNiIVDbsTXLHad7R7YNnCk600Mi34VEhxV4ZRKSQpiugQ4mXnEXlwD30zfWYy8T5xwMu%2BNT0qLNOSyCW16sl9421rxi%2BYxttfnTY%2BSvbarpm1JbpLQHSD%2BTC3fCZG%2BtUtFp9KqCzPo2oW7l8Lnu47PL5fu9N4WYhJF");
    11. // 发送请求并获取响应
    12. HttpResponseMessage hresponse = await client.SendAsync(request);

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

  • 相关阅读:
    vue3 vite4 安装eslint进行初始化时报错
    大数据毕业设计选题推荐-污水处理大数据平台-Hadoop-Spark-Hive
    【Java】poi-tl实现导出Word模板并动态渲染数据
    Java 设计模式实战系列—单例模式
    10. python字典
    外汇天眼:美联储又一高管支持11月加息75个基点12月小幅加息 通胀不达标不罢休
    基于yolov2深度学习网络的猫脸检测识别matlab仿真
    ChunJun(OldNameIsFlinkX)
    分类网络知识蒸馏【附代码】
    国庆北京游玩攻略
  • 原文地址:https://blog.csdn.net/Shinobi_Jack/article/details/142178951