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

C#网络编程System.Net.WebClient 类vs System.Net.Http.HttpClient 类

目录

一、WebClient 类

1.WebClient 将数据上传到资源的方法

2.WebClient 从资源下载数据的方法

3.示例源码

4.生成效果

二、HttpClient 类

1.示例源码

2.生成效果


        为什么要把两者拿出来pk呢?那是因为WebClient已经在.NET 6.0以后得版本被弃用了,一旦在.NET 6.0以上的框架下使用时,会产生SYSLIB0014 警告。虽然可以根据提示采取措施禁止警告,但已经是不正常的状态了。

        SYSLIB0014 警告 - .NET | Microsoft Learn  https://learn.microsoft.com/zh-cn/dotnet/fundamentals/syslib-diagnostics/syslib0014

        从 .NET 6 开始,将以下 API 标记为已过时。 在代码中使用这些 API 会在编译时生成警告 SYSLIB0014。并提示解决方法:请改用 HttpClient。

        WebRequest()
        System.Net.WebRequest.Create
        System.Net.WebRequest.CreateHttp
        System.Net.WebRequest.CreateDefault(Uri)
        HttpWebRequest(SerializationInfo, StreamingContext)
        System.Net.ServicePointManager.FindServicePoint
        WebClient()

一、WebClient 类

         命名空间:System.Net。提供用于将数据发送到由 URI 标识的资源及从这样的资源接收数据的常用方法。

        类 WebClient 提供用于将数据发送到或从 URI 标识的任何本地、Intranet 或 Internet 资源接收数据的常用方法。

        类 WebClient 使用 WebRequest 类提供对资源的访问权限。 WebClient实例可以访问使用 方法注册WebRequest.RegisterPrefix的任何WebRequest后代的数据。

1.WebClient 将数据上传到资源的方法

方法说明
OpenWriteStream检索用于将数据发送到资源的 。
OpenWriteAsyncStream检索用于将数据发送到资源的 ,而不会阻止调用线程。
UploadData将字节数组发送到资源,并返回包含任何响应的 Byte 数组。
UploadDataAsync在不 Byte 阻止调用线程的情况下,将数组发送到资源。
UploadFile将本地文件发送到资源并返回包含任何响应的 Byte 数组。
UploadFileAsync在不阻止调用线程的情况下,将本地文件发送到资源。
UploadValues将 发送到 NameValueCollection 资源并返回包含任何响应的 Byte 数组。
UploadValuesAsync将 发送到 NameValueCollection 资源并返回包含 Byte 任何响应的数组,而不会阻止调用线程。
UploadString将 发送到 String 资源,并返回包含 String 任何响应的 。
UploadStringAsync将 发送到 String 资源,而不会阻止调用线程。

2.WebClient 从资源下载数据的方法

方法说明
OpenRead以 的形式 Stream返回资源中的数据。
OpenReadAsync从资源返回数据,而不会阻止调用线程。
DownloadData从资源下载数据并返回 Byte 数组。
DownloadDataAsync从资源下载数据并返回 Byte 数组,而不会阻止调用线程。
DownloadFile将数据从资源下载到本地文件。
DownloadFileAsync将数据从资源下载到本地文件,而不会阻止调用线程。
DownloadStringString从资源下载 并返回 String。
DownloadStringAsync从资源下载 , String 而不会阻止调用线程。

3.示例源码

// WebClient
// .NET 4.8控制台应用
// The following code example creates a WebClient instance 
// and then uses it to download data from a server and display it on the system console, 
// to download data from a server and write it to a file, 
// and to upload form values to a server and receive the response. 
using System;
using System.Collections.Specialized;
using System.Net;
using System.Text;

namespace ConsoleApp2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Download the data to a buffer.
                WebClient client = new WebClient();

                byte[] pageData = client.DownloadData("http://www.contoso.com");
                string pageHtml = Encoding.ASCII.GetString(pageData);
                Console.WriteLine(pageHtml);

                // Download the data to a file.
                client.DownloadFile("http://www.contoso.com", "page.htm");

                // Upload some form post values.
                NameValueCollection form = new NameValueCollection
                {
                    { "MyName", "MyValue" }
                };
                byte[] responseData = client.UploadValues("http://www.contoso.com/form.aspx", form);
            }
            catch (WebException webEx)
            {
                Console.WriteLine(webEx.ToString());
                if (webEx.Status == WebExceptionStatus.ConnectFailure)
                {
                    Console.WriteLine("Are you behind a firewall?  If so, go through the proxy server.");
                }
            }
        }
    }
}

4.生成效果

<html>
    <head>
        <title>Microsoft Corporation</title>
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"></meta>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta><meta name="SearchTitle" content="Microsoft.com" scheme=""></meta>
        <meta name="Description" content="Get product information, support, and news from Microsoft." scheme=""></meta>
        <meta name="Title" content="Microsoft.com Home Page" scheme=""></meta>
        <meta name="Keywords" content="Microsoft, product, support, help, training, Office, Windows, software, download, trial, preview, demo,  business, security, update, free, computer, PC, server, search, download, install, news" scheme=""></meta>
        <meta name="SearchDescription" content="Microsoft.com Homepage" scheme=""></meta>
    </head>
    <body>
        <p>Your current User-Agent string appears to be from an automated process, if this is incorrect, please click this link:<a href="http://www.microsoft.com/en/us/default.aspx?redir=true">United States English Microsoft Homepage</a></p>
    </body>
</html>

二、HttpClient 类

        命名空间:System.Net.Http。一个用于从 URI 标识的资源发送 HTTP 请求和接收 HTTP 响应的类。

1.示例源码

// HttpClient
// HttpClient is intended to be instantiated once per application, rather than per-use. See Remarks.
// Call asynchronous network methods in a try/catch block to handle exceptions.
namespace test1 
{  
    class Program
    {
        static readonly HttpClient client = new();
        static async Task Main()
        {           
            try
            {
                using HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");
                response.EnsureSuccessStatusCode();
                string responseBody = await response.Content.ReadAsStringAsync();
                // Above three lines can be replaced with new helper method below
                // string responseBody = await client.GetStringAsync(uri);

                Console.WriteLine(responseBody);
            }
            catch (HttpRequestException e)
            {
                Console.WriteLine("\nException Caught!");
                Console.WriteLine("Message :{0} ", e.Message);
            }
        }
    }  
}

2.生成效果

// 运行结果 
<html>
    <head>
        <title>Microsoft Corporation</title>
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"></meta>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
        <meta name="SearchTitle" content="Microsoft.com" scheme=""></meta>
        <meta name="Description" content="Get product information, support, and news from Microsoft." scheme=""></meta>
        <meta name="Title" content="Microsoft.com Home Page" scheme=""></meta>
        <meta name="Keywords" content="Microsoft, product, support, help, training, Office, Windows, software, download, trial, preview, demo,  business, security, update, free, computer, PC, server, search, download, install, news" scheme=""></meta>
        <meta name="SearchDescription" content="Microsoft.com Homepage" scheme=""></meta>
    </head>
    <body>
        <p>Your current User-Agent string appears to be from an automated process, if this is incorrect, please click this link:<ahref="http://www.microsoft.com/en/us/default.aspx?redir=true">United States English Microsoft Homepage</a></p>
    </body>
</html>


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

相关文章:

  • 并发基础:(淘宝笔试题)三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC....”的字符串【举一反三】
  • ArcGIS Pro属性表乱码与字段名3个汉字解决方案大总结
  • Java设计模式面试题及参考答案
  • 10款翻译工具实践体验感受与解析!!!!!
  • 系统架构设计师论文:大数据Lambda架构
  • 【MySQL】数据库表连接简明解释
  • windows下docker环境搭建与运行实战
  • UCore-OS实验Lab0
  • 说一说MySQL中的锁机制
  • 通过Python Flask快速构建应用程序
  • 计算机视觉各个方向概述
  • JavaWeb 带条件的分页查询
  • 视图层与模板层
  • React如何像Vue一样将css和js写在同一文件
  • Rust多线程任务,发现有些线程一直获取不到锁【已解决】
  • 设计模式-结构型模式之装饰者设计模式
  • vscode配置代码片段
  • 吴恩达《机器学习》11-1-11-2:首先要做什么、误差分析
  • Ubuntu Linux玩童年小霸王插卡游戏
  • [MySQL]日期和时间函数
  • [Rust] 可迭代类型, 迭代器, 如何正确的创建自定义可迭代类型
  • 安防视频监控/磁盘阵列/集中云存储平台EasyCVR设备录像保活不生效原因是什么?该如何解决?
  • jdk1.8 hashmap源码阅读
  • 轻易云AI:引领企业数智化转型提升企业AI效率
  • python查询、处理、批量存入数据
  • navicat某些表为什么不按主键排序