zoukankan      html  css  js  c++  java
  • .Net(C#)后台发送Get和Post请求的几种方法总结

    转自:https://www.cjavapy.com/article/50/

    本文主要介绍分别通过HttpClient、Flurl.Http、WebRequest和WebClient发送Get和Post请求的方法。

     

    1、通过HttpClient发送Get和Post请求

    适用平台:.NET Framework 4.5+, .NET Standard 1.1+, .NET Core 1.0+

    其它平台的移植版本可以通过Nuget来安装。(Nuget使用方法:http://www.cjavapy.com/article/21/)

    命名空间:using System.Net.Http;

    HttpClient推荐使用单一实例共享使用,发关请求的方法推荐使用异步的方式,代码如下,

    private static readonly HttpClient client = new HttpClient();
    //发送Get请求
    var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");
    //发送Post请求
    var values = new Dictionary
    {
       { "thing1", "hello" },
       { "thing2", "world" }
    };
    var content = new FormUrlEncodedContent(values);
    var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);
    var responseString = await response.Content.ReadAsStringAsync();

    2、通过第三方类库发送Get和Post请求

    1)Flurl.Http(可以通过Nuget来安装)

    命名空间:using Flurl.Http;

    //发送Get请求
    var responseString = await "http://www.example.com/recepticle.aspx"
        .GetStringAsync();
    //发送Post请求
    var responseString = await "http://www.example.com/recepticle.aspx"
        .PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" })
        .ReceiveString();

    2)RestSharp(可以通过Nuget来安装)

    //发送Get和Post请求
     RestClient client = new RestClient("http://example.com");//指定请求的url
     RestRequest req = new RestRequest("resource/{id}", Method.GET);//指定请求的方式,如果Post则改成Method.POST
    request.AddParameter("name", "value"); // 添加参数到 URL querystring
    request.AddUrlSegment("id", "123"); // 替换上面指定请求方式中的{id}参数
    //req.AddBody(body); /*如发送post请求,则用req.AddBody()指定body内容*/
    //发送请求得到请求的内容
    //如果有header可以使用下面方法添加
    //request.AddHeader("header", "value");
    IRestResponse response = client.Execute(request);
    //上传一个文件
    //request.AddFile("file", path);
    var content = response.Content; // 未处理的content是string
    //还可以下面几种方式发送请求
    //发送请求,反序列化请求结果
    IRestResponse response2 = client.Execute(request);
    var name = response2.Data.Name;
    //发送请求下载一个文件,并保存到path路径
    client.DownloadData(request).SaveAs(path);
    // 简单发送异步请求
    await client.ExecuteAsync(request);
    // 发送异常请求并且反序列化结果
    var asyncHandle = client.ExecuteAsync(request, response => {
        Console.WriteLine(response.Data.Name);
    });
    //终止异步的请求
    asyncHandle.Abort();

    3、比较老一点的方法通过WebRequest发送请求

    适用平台:.NET Framework 1.1+, .NET Standard 2.0+, .NET Core 1.0+

    命名空间:
    using System.Net;
    using System.Text;  // for class Encoding
    using System.IO;    // for StreamReader

     

    //发送Get请求
    var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
    var response = (HttpWebResponse)request.GetResponse();
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
    //发送Post请求
    var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
    var postData = "thing1=hello";
        postData += "&thing2=world";
    var data = Encoding.ASCII.GetBytes(postData);
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = data.Length;
    using (var stream = request.GetRequestStream())
    {
        stream.Write(data, 0, data.Length);
    }
    var response = (HttpWebResponse)request.GetResponse();
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

     

    4、通过WebClient的方式发送请求

    适用平台:.NET Framework 1.1+, .NET Standard 2.0+, .NET Core 2.0+

    命名空间:
    using System.Net;
    using System.Collections.Specialized;

     

    using System.Net;
    using System.Collections.Specialized;
    //发送Get请求
     string url = string.Format("http://localhost:28450/api/values?p1=a&p2=b");
     using (var wc = new WebClient())
    {
     Encoding enc = Encoding.GetEncoding("UTF-8");
     Byte[] pageData = wc.DownloadData(url);
     string re = enc.GetString(pageData);
    }
    //发送Post请求
    using (var client = new WebClient())
    {
        var values = new NameValueCollection();
        values["thing1"] = "hello";
        values["thing2"] = "world";
        var response = client.UploadValues("http://www.example.com/recepticle.aspx", values);
        var responseString = Encoding.Default.GetString(response);
    }
  • 相关阅读:
    命令行net time同步时间(内网)
    清理树莓派系统垃圾
    树莓派常用功能的安装和使用
    树莓派的媒体播放软件omxplayer
    树莓派安装FTP服务器
    Raspbian 中国软件源
    树莓派挂载和卸载U盘或移动硬盘
    树莓派上搭建NAS
    Aria2+yaaw+Chrome插件BaiduExporter实现百度网盘下载
    树莓派做下载机+Web服务器(Aria2下载+yaaw做UI+nginx)
  • 原文地址:https://www.cnblogs.com/xiaoli9627/p/14804681.html
Copyright © 2011-2022 走看看