首页 > 其他分享 >再也不用写请求HttpHelper了,HttpClient帮助你

再也不用写请求HttpHelper了,HttpClient帮助你

时间:2023-08-18 09:50:01浏览次数:36  
标签:请求 HttpHelper Add var new webClient HttpClient

前言

在C#7.1之后,net推出HttpClient类代替WebRequest, HttpWebRequest, ServicePoint, and WebClient ,先来看下他们在以前的作用

  • HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的一种方式
  • ServicePoint提供 HTTP 连接的连接管理
  • WebClient 提供用于将数据发送到由 URI 标识的资源及从这样的资源接收数据的常用方法

相信大家都使用过http的帮助类,来帮助我们处理请求客户端。C#7.1版本推出 HttpClient ,现在有了HttpClient,完全可以不再使用帮助类了,HttpClient使用起来更方便,甚至你连请求方法是Post,Put,Get都不用写,功能十分强大。

WebRequest, HttpWebRequest, ServicePoint, and WebClient 已经过时,请使用 HttpClient

使用(异步请求,下载等)

属性

方法

GetAsync(String)以异步操作将 GET 请求发送给指定 URI。

普通的get请求获取请求消息 返回的HttpResponseMessage包含所有的响应信息,比如说状态码,响应的消息头,相应的json等都可以用这个来处理

GetByteArrayAsync(String)将 GET 请求发送到指定 URI 并在异步操作中以字节数组的形式返回响应正文

                using (var webClient = new System.Net.Http.HttpClient())
                {

                    var bytes = await webClient.GetByteArrayAsync(vodeourl.VideoUrl);
                    //var fileStream = new FileStream($"{videoid}.mp4", FileMode.Create, FileAccess.Write);
                    //fileStream.Write(stream, 0, stream.Length);
                    //fileStream.Dispose();
                }

添加cookies

var handler = new HttpClientHandler();
            var cookieContainer = new CookieContainer();
            cookieContainer.Add(new Uri(url), new Cookie("cookie_name", "cookie_value"));
            handler.CookieContainer = cookieContainer;


            using (var webClient = new System.Net.Http.HttpClient(handler))
            {
                webClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0");
                webClient.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
                webClient.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600");

                var aa = webClient.GetStringAsync(url).Result;
                return aa.ToString();
                //await Console.Out.WriteLineAsync(str);
                //var fileStream = new FileStream($"{videoid}.mp4", FileMode.Create, FileAccess.Write);
                //fileStream.Write(stream, 0, stream.Length);
                //fileStream.Dispose();
            }

请求Json格式

通过Post请求数据: application/x-www-form-urlencoded

var httpClient = new HttpClient();
var url = "http://192.168.0.9:9000/Demo/PostUrlCode";
var response = await httpClient.PostAsync(url, new FormUrlEncodedContent(new List<KeyValuePair<string, string>>()
{
    new KeyValuePair<string, string>("name","小明"),
    new KeyValuePair<string, string>("age","20")
}));
var str = await response.Content.ReadAsStringAsync();

上传文件

using (HttpClient client = new HttpClient())
{
    var content = new MultipartFormDataContent();
    //添加字符串参数,参数名为qq
    content.Add(new StringContent("123456"), "qq");
 
    string path = Path.Combine(System.Environment.CurrentDirectory, "1.png");
    //添加文件参数,参数名为files,文件名为123.png
    content.Add(new ByteArrayContent(System.IO.File.ReadAllBytes(path)), "file", "123.png");
 
    var requestUri = "http://192.168.1.108:56852/api/Test/SaveFile";
    var result = client.PostAsync(requestUri, content).Result.Content.ReadAsStringAsync().Result;
 
    Console.WriteLine(result);
}

请求超时

var httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromSeconds(10); // 设置超时时间为10秒

var url = "xxxxxxxxxx";
List<KeyValuePair<string, string>> fromdic = dic.ToList();
var sign = Tool.Sign(dic, key);
fromdic.Add(new KeyValuePair<string, string>("sign", sign));

CancellationTokenSource cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(10)); // 设置取消请求的时间为10秒

标签:请求,HttpHelper,Add,var,new,webClient,HttpClient
From: https://www.cnblogs.com/netcore5/p/17639546.html

相关文章

  • React请求机制优化思路
    说起数据加载的机制,有一个绕不开的话题就是前端性能,很多电商门户的首页其实都会做一些垂直的定制优化,比如让请求在页面最早加载,或者在前一个页面就进行预加载等等。随着react18的发布,请求机制这一块也是被不断谈起,并且在后续其实也给出了明确的方向。假如我们页面中有三个组件C1......
  • 一次完整的HTTP请求所经历的7个步骤
    一次完整的HTTP请求所经历的7个步骤HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:1.建立TCP连接在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP......
  • Asp.net区分请求来自PC端还是APP端
    区别请求来自于APP还是PC端,主要是通过客户端传递的User-Agent来做判断的。User-Agent来自于请求头Header,如下图两种方式:来自于PC请求来自于APP请求代码获取User-Agent的值......
  • Python实现自定义请求头消息headers
    使用python爬虫爬取数据的时候,经常会遇到一些网站的反爬虫措施,一般就是针对于headers中的User-Agent,如果没有对headers进行设置,User-Agent会声明自己是python脚本,而如果网站有反爬虫的想法的话,必然会拒绝这样的连接。而修改headers可以将自己的爬虫脚本伪装成浏览器的正常访问,来......
  • 通过iptables将http请求从A服务器转发到B服务器
    1、准备服务器、终端使用docker的容器来模拟所需的服务器、终端。dockerfile如下:FROMcentos:centos7asiptables-testRUNyuminstall-yiptables-services&&yuminstall-ytcpdumpdocker-compose.yml如下:version:"2.7"services:work0:build:.host......
  • flask请求响应
    1请求所有的web请求:都有请求对象和响应对象(java,go,python)每个web框架都会有一个请求框架都会有一个响应框架django:request(每个请求都有一个request)flask:request全局的但也是每个请求一个request新手三件套eg:fromflaskimportFlask,render_template,requestapp......
  • flask 处理大量请求
    Flask,一个用Python编写的轻量级Web应用框架,由于其简洁、易用、灵活,以及强大的扩展性,被广大开发者所喜爱。在实际应用中,我们经常会遇到需要处理大量请求的场景,比如高并发的Web服务器、API接口等。本文将介绍如何使用Flask来处理大量请求。使用多线程或多进程为了提高程序的并发性......
  • springmvc 开启异步请求报错 Java code using the Servlet API or by adding "true"
    报错内容:java.lang.IllegalStateException:Asyncsupportmustbeenabledonaservletandforallfiltersinvolvedinasyncrequestprocessing.ThisisdoneinJavacodeusingtheServletAPIorbyadding"true"toservletandfilterdeclarationsin......
  • js网络请求
    varxhr=newXMLHttpRequest();xhr.withCredentials=false;xhr.open('post','http://localhost:20100/API/Wms/GetDeliveryDate',true);//请求超时的时间(单位:毫秒)xhr.timeout=3000;//xhr.open('post','http://supply.zhglory.com.cn:90......
  • 仿@FeignClient实现使用Http请求外部服务
    因为某些原因,原本注册在同一个nacos里的部分微服务需要拆分出去,而拆分出去的那部分服务调用方式需要修改。所以为了简单省事,加个了@HttpClient注解用来替换@FeignClient。三步走:  1、@HttpClient注解  2、扫描被@HttpClient注解的接口  3、为扫描到的接口创建代理类@Ht......