首页 > 编程语言 >c# 的网络请求相关类

c# 的网络请求相关类

时间:2023-02-16 16:44:37浏览次数:50  
标签:请求 c# request 网络 client var new response

c# 的请求类主要包括 HttpWebRequest;WebClient;HttpClient,RestSharp,其中 RestSharp是社区的网络请求方案,这里主要是讨论各自的特定

HttpWebRequest
这个类是 .net 比较早 出的网络请求类,可以自己控制 超时时间,cookie等比较常用的,对http协议进行了完整的封装,对协议中的header,content等做了属性或者方法的支持
优点:功能强大,支持的.net版本最多 缺点:使用麻烦,需要自己设置各种配置,被官方抛弃了 2333

代码

HttpWebRequest requst = (HttpWebRequest)WebRequest.Create("https://www.baidu.com");
requst.Headers.Add("xxx");
requst.Headers.Add("xxx");
requst.CookieContainer.Add(new Cookie("xx","xxx"));
requst.Timeout = 30000;
var response = requst.GetResponse();
1
2
3
4
5
6
WebClient
这个类是一种更高几倍的抽象,也就是对httpWebRequest的进一步封装,简化了一些步骤
优点:使用简单,下载文件使用方便,相对而已支持net版本也比较多 缺点:功能上有些缺失,没有timeout等的设置,官方不更新功能,只做些修复

using (var webClinet = new WebClient())
{
webClinet.DownloadFile("address_xxx..","fileName_xxx");
}
1
2
3
4
HttpClient
这个是比较后面出的请求类,支持异步模型编程,更适合现代的网络编程,官方主推这个,功能强大,支持单个实例发送请求,连接重复利用,占用资源少。
优点:异步编程模型适合现代的网络请求 缺点:请求速度上还是稍慢,越上层的封装,越是有些损耗,但是总体问题不大,支持的net版本相对比较少,后面主要是net core方向的支持

using (var client = new HttpClient())
{
var data = client.GetStringAsync("xxxx").Result;
}
1
2
3
4
RestSharp
这个社区的贡献,功能也是比较强大 适合rest 风格的编程,api请求友好,以下是官方的 请求案例

优点:适合api的请求风格,非常的灵活,不依赖第三方,支持net版本多 缺点:使用上还是相对比较麻烦,非微软官方维护,依赖社区,遇到问题可能没有相关的文档查询

var client = new RestClient("http://example.com");
// client.Authenticator = new HttpBasicAuthenticator(username, password);

var request = new RestRequest("resource/{id}", Method.POST);
request.AddParameter("name", "value"); // adds to POST or URL querystring based on Method
request.AddUrlSegment("id", "123"); // replaces matching token in request.Resource

// easily add HTTP Headers
request.AddHeader("header", "value");

// add files to upload (works with compatible verbs)
request.AddFile(path);

// execute the request
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string

// or automatically deserialize result
// return content type is sniffed but can be explicitly set via RestClient.AddHandler();
RestResponse<Person> response2 = client.Execute<Person>(request);
var name = response2.Data.Name;

// easy async support
client.ExecuteAsync(request, response => {
Console.WriteLine(response.Content);
});

// async with deserialization
var asyncHandle = client.ExecuteAsync<Person>(request, response => {
Console.WriteLine(response.Data.Name);
});

// abort the request on demand
asyncHandle.Abort();

标签:请求,c#,request,网络,client,var,new,response
From: https://www.cnblogs.com/iseaside/p/17127304.html

相关文章

  • PHP安装SOAP扩展调用webservice获取数据
    报错内容: 调用方式:   错误原因:  URL未加后缀?WSDL导致异常,加入后异常问题解决。......
  • 漏洞复现-docker未授权rce
    0x00实验环境攻击机:Ubuntu靶场:vulhub搭建的靶场环境 0x01影响版本 dockerAPI(1.37及其他版本)未授权访问漏洞,开放2375监听容器时,会调用这个API,方便docker集群管理......
  • [C#]实用方法收集
    邮件发送 usingSystem;usingSystem.Net.Mail;usingSystem.Net;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFormsApp1{publicpar......
  • 计算机网络安全
    1、计算机网络协议与标准协议:计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合(可以理解为规则)协议的三要素:语法:用户数据与控制信息的结构与格式,......
  • C++梳理
    1、基础篇1、C++中的四种智能指针为什么要使⽤智能指针:智能指针其作⽤是管理⼀个指针,避免程序员申请的空间在函数结束时忘记释放,造成内存泄漏这种情况的发⽣。使⽤智能......
  • Unity IL2cpp内存管理
    分配关键类hblkstructhblk{charhb_body[HBLKSIZE];};BoehmGC是按照block来分配内存的,HBLKSIZE表示每个block大小默认值是4096,和页大小一致,猜测合理的值......
  • 新装的PDK调用device不显示
    pdk安装完以后,有些用户在调用的时候显示为空,原因是pdk里面某些文件others没有read权限。   1.cp-a完整的pak路径到others的工作目录下,不能拷贝的文件就是没有权限的......
  • 零代码(低代码)工作流引擎(cube-flowable)
    cube-flowable工作流引擎简介cube-flowable工作流引擎旨在打造一套零代码、领先、且快速实用的引擎工具,助力开发者在面对工作流开发任务时,除去学习工作流框架知识和API......
  • CV-部署芯片接续-CV全流程部署-TF版本
    CV-部署芯片接续-CV全流程部署-TF版本1单个CNN算子importcv2importnumpyasnpimporttensorflowastfimportosfromtensorflow.python.frameworkimportgrap......
  • chatGPT为什么国内用不了,来看看我是如何使用chatGPT
      chatGPT火了这么久在各个平台上看到有很多博主发了使用chatGPT的感受,由于官方限制了中国大陆和中国香港中国台湾地区的访问,导致很多网友无法感受到chatGPT强大,至于为......