C#实现发送简单HTTP请求的方法

下面是详细讲解" C#实现发送简单HTTP请求的方法" 的完整攻略。

什么是HTTP请求

HTTP (Hypertext Transfer Protocol) 是应用最为广泛的一种网络通信协议. 在 Web 上, 当浏览器需要获取服务器的网页或其他资源时, 就会发送 HTTP 请求. Web 服务器则依照我们在 HTTP 请求消息中指定的内容进行相应处理, 并将处理结果返回给浏览器.

C#实现发送HTTP请求的方法

C# 提供了很多实现 HTTP 请求的类,其中有 WebClient、HttpWebRequest、HttpClient 等。下面我们分别来进行介绍。

WebClient

WebClient 是 .NET Framework 提供的一个方便的类用来执行基本的 HTTP 请求。使用 WebClient 类,你只需要用一个简单的语句即可完成发送 HTTP 请求的过程。

WebClient client = new WebClient();
string url = "http://www.example.com";
string response = client.DownloadString(url);

上面代码就是使用 WebClient 发送 GET 请求并获取响应报文。

HttpWebRequest

HttpWebRequest 是 .NET Framework 提供的另一个实现 HTTP 请求的类,使用 HttpWebRequest 需要手写更多的代码,但是它对于处理 Web 请求的细节更具有控制力,并可以实现更复杂的 HTTP 访问请求。

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
req.ContentType = "application/x-www-form-urlencoded";
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
string response = sr.ReadToEnd();

上面代码就是使用 HttpWebRequest 发送 GET 请求并获取响应报文。

HttpClient

HttpClient 是 .NET Framework 4.5 引入的新的实现 HTTP 请求的类。HttpClient 对象是用一个 HttpClientHandler 对象来初始化的,它可以配置请求过程中的各种参数。同时,HttpClient 还支持异步操作。

HttpClient client = new HttpClient();
string url = "http://www.example.com";
HttpResponseMessage resp = await client.GetAsync(url);
string response = await resp.Content.ReadAsStringAsync();

上面代码就是使用 HttpClient 发送 GET 请求并获取响应报文。

POST请求

以上的示例都是 GET 请求,如果需要 POST 请求同样也可以使用上述类来实现,请根据对应类的属性和方法进行设置。

示例说明

下面我们使用 HttpWebRequest 类来发送一个 POST 请求,向 httpbin 网站提交一个包含参数的表单。

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://httpbin.org/post");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
string data = "name=test&age=18";
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
req.ContentLength = dataBytes.Length;
Stream stream = req.GetRequestStream();
stream.Write(dataBytes, 0, dataBytes.Length);
stream.Close();
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
string result = sr.ReadToEnd();

结果:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "age": "18", 
    "name": "test"
  }, 
  "headers": {
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "15", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:93.0) Gecko/20100101 Firefox/93.0", 
    "X-Amzn-Trace-Id": "Root=1-616566c2-50a132da126ac9824f3539c1"
  }, 
  "json": null, 
  "origin": "218.89.220.18", 
  "url": "https://httpbin.org/post"
}

这里我们向 httpbin 提交了一个包含参数的表单,httpbin 将我们提交的数据返回给了客户端,并返回了 HTTP 响应报文,我们在代码中获取了响应报文,打印出了响应结果的字符串。

另外,httpbin 可以模拟响应不同的响应码,我们可以使用以上方法模拟提交失败时,httpbin 响应 403 响应码的返回。

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://httpbin.org/status/403");
HttpWebResponse resp;
try
{
    resp = (HttpWebResponse)req.GetResponse();
}
catch (WebException ex)
{
    resp = (HttpWebResponse)ex.Response;
}
StreamReader sr = new StreamReader(resp.GetResponseStream());
string result = sr.ReadToEnd();

结论:发生了异常,抓取了 httpbin 返回的 403 响应码的响应报文,输出了相应的响应内容。

以上示例主要介绍了如何使用 C# 中的三种不同的HTTP请求类来发送 HTTP GET 和 POST 请求,并获取响应结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现发送简单HTTP请求的方法 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C#使用async和await实现异步编程

    下面是C#使用async和await实现异步编程的完整攻略。 什么是异步编程? 异步编程是指同时执行多个操作,而且不用等待当前操作完成再去执行下一个操作的编程方式。使用异步编程可以在所有操作都完成之前充分利用资源,提高性能和效率。 C#异步编程的实现方式 在C#中,异步编程可以使用async和await关键字实现。async关键字用于修饰方法,表明该方法是异…

    C# 2023年5月15日
    00
  • c# 异步编程入门

    C# 异步编程入门 什么是异步编程 异步编程是指在代码执行时,允许在执行某些线程耗时的操作时不会阻塞当前线程的执行,以提高程序的性能和响应速度。在 C# 中,异步编程通常与任务(Task)和异步方法(async/await)一起使用。 使用 async/await 实现异步编程 异步编程最常见的实现方式是使用 async/await 关键字。这两个关键字一起…

    C# 2023年6月6日
    00
  • 在VS2017中用C#调用python脚本的实现

    这里提供了一种寻常的方法,在VS2017中通过C#调用Python脚本的实现,具体过程如下: 准备工作 安装 Python3.x 及 pip,并添加环境变量; 安装 Python 的 C++ 接口库:pip install pybind11; 安装 Python 的包管理器 pipenv:pip install pipenv; 新建一个 .NET Frame…

    C# 2023年5月15日
    00
  • C#中Invoke的用法讲解

    下面我来详细讲解一下C#中Invoke的用法。 1. 概述 在C#中,Invoke是一种利用委托类型对控件进行操作的方法,一般用于在多线程情况下更新控件的界面。 2. 使用方法 Invoke方法是Control类的一个方法,用于对控件进行操作。Invoke方法有两种使用方式,分别是同步方式和异步方式: 2.1 同步方式 在同步方式中,Invoke方法会在当前…

    C# 2023年5月15日
    00
  • C#中实现线程同步lock关键字的用法详解

    下面是“C#中实现线程同步lock关键字的用法详解”的完整攻略。 1. 什么是线程同步 线程同步是指不同线程之间按照一定的顺序执行,避免线程之间的竞争和混乱。在多线程编程中,线程同步非常重要。C# 中的 lock 关键字可以用来实现线程同步。 2. lock关键字的语法 lock 关键字用于保护一个代码快,以确保只有一个线程可以访问它。lock 关键字必须使…

    C# 2023年6月7日
    00
  • C#流程控制详解

    C#流程控制详解 前言 C#中的流程控制结构对于程序设计师是非常重要的,它可以控制代码的执行次序和执行条件,使得程序可以更好的实现我们所期望的功能。本文将讲解C#中常见的流程控制结构,包括分支语句和循环语句,并对每种结构进行详细解释和举例。 分支语句 if语句 if语句是一种最基本的分支语句,用于判断某个条件是否成立,如果条件成立执行一定的代码块,如果条件不…

    C# 2023年5月14日
    00
  • C# File.Copy(string sourceFileName, string destFileName):复制指定文件

    File.Copy(string sourceFileName, string destFileName)方法是C#中的一个文件操作方法,其主要作用是将一个已存在的文件复制到一个新的文件中。该方法的语法如下: public static void Copy(string sourceFileName, string destFileName); 该方法有两个…

    C# 2023年4月19日
    00
  • Unity shader实现消融效果

    以下是Unity shader实现消融效果的完整攻略,包含两条示例说明: 1.实现思路 要实现消融效果,可以通过以下步骤实现: 创建一个新的 shader ,命名为melting。 在 ShaderLab 中配置 SubShader 和 Pass。 在 CG 程序中编写顶点和片段着色器,实现消融效果。 2. ShaderLab 部分 首先,我们需要在 Sha…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部