弹来弹去跑马灯!

C# HttpClient 流式响应

有些时候需要边请求边显示响应内容:

用httpClient.SendAsync(httpreq, HttpCompletionOption.ResponseHeadersRead);

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
private async void TestHttp()
       {
 
           DateTime d = DateTime.Now;
           HttpClient httpClient = new HttpClient();
           httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58");
           httpClient.DefaultRequestHeaders.Add("Origin", "https://xxxx.com");
           httpClient.DefaultRequestHeaders.Add("Referer", "https://xxxxx.com/");
           StringContent jsonContent = new StringContent(
               JsonConvert.SerializeObject(new
               {
                   data= "你们的发货地是哪里?",
                   userId = "1211334",
                   title = "test",
                   usesyy = false
               }),
            Encoding.UTF8,
            "application/json");
           var httpreq = new HttpRequestMessage(HttpMethod.Post, "https://xxxxxx") { Content = jsonContent };
           var response = await httpClient.SendAsync(httpreq, HttpCompletionOption.ResponseHeadersRead);
           //var response = await httpClient.PostAsync("https://api.xxxxx", jsonContent);
 
           // 确保请求成功
           //response.EnsureSuccessStatusCode();
           string allStr = "";
           // 读取响应内容的异步流
           using (var responseStream = await response.Content.ReadAsStreamAsync())
           {
               Debug.Print("============start response use minseconds=" + (DateTime.Now - d).TotalMilliseconds + "  =================\r\n");
               // 逐块读取并处理响应内容
               var buffer = new byte[102];
               int bytesRead;
               while ((bytesRead = await responseStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
               {
                   // 处理响应内容
                   string content = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);
                   allStr += content;
                   Debug.Print("---------------" + content + "\r\n");
               }
           }
           var useTime = (DateTime.Now - d).TotalMilliseconds;
           var t2 = (DateTime.Now - DateTime.Now.AddMilliseconds(-100)).TotalMilliseconds;
           TestHttp();
       }

  

posted @   wgscd  阅读(1584)  评论(4编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示