开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 810|回复: 0
收起左侧

[C#源码] C#所见即所得-HttpClient-新手帖,相互学习!

[复制链接]
结帖率:100% (5/5)
发表于 2023-8-3 12:54:54 | 显示全部楼层 |阅读模式   湖北省潜江市
[C#] 纯文本查看 复制代码
using System;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

/*
 * 文档地址:https://learn.microsoft.com/zh-cn/dotnet/api/system.net.http.httpclient?view=netframework-4.8
 HttpClient 旨在实例化一次,并在应用程序的整个生命周期内重复使用。
在 .NET Core 和 .NET 5+ 中,HttpClient 将连接池在处理程序实例内,并在多个请求之间重复使用连接。 
如果为每个请求实例化 HttpClient 类,则重负载下可用的套接字数将耗尽。 这种耗尽将导致 SocketException 错误。
 
-----HttpClient这个是官方文档推荐使用的----- 这个类会自动解码,解压数据
---还有WebRequest(已弃用)和HttpWebRequest
 */

namespace HttpClientDemo1 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }
        private static HttpClientHandler _HttpHandler = new HttpClientHandler() {
            CookieContainer = new CookieContainer()
        };
        private static HttpClient _HttpClient = new HttpClient(_HttpHandler);

        //异步获取返回的字符串
        private async void buttonGetString_Click(object sender, EventArgs e) {
            Uri url = new Uri("https://www.baidu.com");
            string baidu = await _HttpClient.GetStringAsync(url); //异步获取请求的字符串

            textBox1.AppendText(baidu.Substring(0, 10));//截取前10个字符串

            Console.WriteLine(baidu.Length);

            //遍历cookies
            foreach (Cookie cook in _HttpHandler.CookieContainer.GetCookies(url)) {
                Console.WriteLine(cook.Name + ":" + cook.Value);
                textBox1.AppendText(cook.Name + ":" + cook.Value);
            }
        }


        //以任务的方式异步请求
        private async void buttonSendAsync_Click(object sender, EventArgs e) {
            HttpRequestMessage httpRequest = new HttpRequestMessage();
            httpRequest.Method = HttpMethod.Get;
            httpRequest.RequestUri = new Uri("https://www.baidu.com");
            // httpRequest.Content = new StringContent(""); //post提交时需要设置的数据,3种选择其中一个
            //httpRequest.Content = new StreamContent();
            // httpRequest.Content = new ByteArrayContent();

            httpRequest.Headers.UserAgent.ParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)");
            HttpResponseMessage httpResponse = await _HttpClient.SendAsync(httpRequest); //异步获取请求的HttpResponseMessage响应

            //遍历协议头
            foreach (var Headers in httpResponse.Headers) {
                foreach (var Header in Headers.Value) {
                    Console.WriteLine(Headers.Key + ":" + Header);
                }
            }

            Console.WriteLine("\r\n-----------------------------------------");

            //遍历cookies
            foreach (Cookie cook in _HttpHandler.CookieContainer.GetCookies(new Uri("https://www.baidu.com"))) {
                Console.WriteLine(cook.Name + ":" + cook.Value);
                textBox1.AppendText(cook.Name + ":" + cook.Value);
            }


        }
        //异步请求,可以取消任务
        private async void buttonSendAsyncCancelToken_Click(object sender, EventArgs e) {

            CancellationTokenSource tokenSource = new CancellationTokenSource(); //创建一个令牌
            tokenSource.CancelAfter(10); //10毫秒之后取消这个任务;

            HttpRequestMessage httpRequest = new HttpRequestMessage();
            httpRequest.Method = HttpMethod.Get;
            httpRequest.RequestUri = new Uri("https://www.baidu.com");


            httpRequest.Headers.UserAgent.ParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)");
            Task<HttpResponseMessage> httpResponseTask = _HttpClient.SendAsync(httpRequest, tokenSource.Token); //异步获取请求的HttpResponseMessage响应
           
            try {
                HttpResponseMessage httpResponse = await httpResponseTask;

                foreach (var Headers in httpResponseTask.Result.Headers) {
                    foreach (var Header in Headers.Value) {
                        Console.WriteLine(Headers.Key + ":" + Header);
                    }
                }

            } catch (Exception ex) {

                Console.WriteLine(ex.Message);

            }



        }
    }
}




列表.e

2.99 KB, 下载次数: 0, 下载积分: 精币 -2 枚

列表.e

2.99 KB, 下载次数: 0, 下载积分: 精币 -2 枚

列表.e

2.99 KB, 下载次数: 0, 下载积分: 精币 -2 枚

新建 易程序.e

3.1 KB, 下载次数: 1, 下载积分: 精币 -2 枚

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表