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);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shinobi_Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值