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#通过接口与线程通信(捕获线程状态)示例代码

    C#通过接口与线程通信(捕获线程状态)示例的完整攻略如下: 线程状态概述 在进行线程通信之前,先要理解线程的状态。在 C# 中,线程有以下几种状态: Unstarted: 表示线程已被创建,但未开始执行。 Running: 表示线程正在运行。 Stopped: 表示线程已经停止。 WaitSleepJoin: 表示线程正在等待被调用,或正在进行 Wait、S…

    C# 2023年5月15日
    00
  • ASP.NET连接SQL数据库的简单实例代码

    下面是ASP.NET连接SQL数据库的简单实例代码的攻略。 简介 在ASP.NET中,连接SQL数据库是一项很常见的任务。通过连接数据库,我们可以将数据存储在数据库中,并在需要的时候从数据库中检索这些数据。本攻略将引导您完成ASP.NET连接SQL数据库的简单实例代码。 步骤 步骤1:创建一个ASP.NET项目 首先,我们需要创建一个ASP.NET项目。可以…

    C# 2023年5月31日
    00
  • WPF+SkiaSharp实现自绘拖曳小球

    WPF 是一种跨平台、络人机交互(HCI)的技术,而 SkiaSharp 是一种用于高效地进行 2D 图形渲染的跨平台、高性能的图形库。这两者的结合可以实现一些非常炫酷的效果,比如实现自绘拖曳小球。 本攻略将分为以下几个步骤: 创建 WPF 窗口; 在 WPF 窗口中引用 SkiaSharp 和 SkiaSharp.Views.Wpf,并在 XAML 中定义…

    C# 2023年6月6日
    00
  • c# 怎样简洁高效的实现多个 Enum 自由转换

    C#怎样简洁高效的实现多个Enum自由转换 在C#中,Enum是一种常用的数据类型,它可以用于定义一组常量。在实际开发中,我们经常需要将不同的Enum类型进行转换,以便在不同的上下文中使用。本文将介绍如何使用C#实现多个Enum自由转换,并提供两个示例来演示如何使用这些技术。 示例1:使用扩展方法实现Enum转换 以下是使用扩展方法实现Enum转换的步骤: …

    C# 2023年5月15日
    00
  • 使用VS2022在ASP.NET Core中构建轻量级服务

    使用VS2022在ASP.NET Core中构建轻量级服务的完整攻略如下: 创建ASP.NET Core项目 在Visual Studio 2022中,选择“创建新项目”,然后选择“ASP.NET Core Web应用程序”模板。在下一个窗口中,选择“API”模板,并选择“ASP.NET Core 6.0”作为目标框架。点击“创建”按钮创建项目。 添加NuG…

    C# 2023年5月16日
    00
  • 深入理解正则表达式语法知识

    深入理解正则表达式语法知识 正则表达式是一个用于文本匹配和处理的强大工具。在各种编程语言和工具中都有使用正则表达式的需求,因此深入理解其语法知识是非常重要的。 正则表达式基础语法 正则表达式由各种字符和符号组成,用于定义匹配规则,其中的常见符号和含义包括: .:匹配任意单个字符(除了换行符\n) *:匹配0个或多个前面的字符 +:匹配1个或多个前面的字符 ?…

    C# 2023年6月7日
    00
  • 详解.Net core2.0日志组件Log4net、Nlog简单性能测试

    详解.Net core2.0日志组件Log4net、Nlog简单性能测试 在.NET Core 2.0应用程序中,日志记录是一个非常重要的组件。本攻略将深入探讨.NET Core 2.0中两个流行的日志组件Log4net和Nlog,并提供两个示例说明。 Log4net Log4net是一个流行的.NET日志记录组件,它提供了灵活的配置选项和高度可定制的输出格…

    C# 2023年5月17日
    00
  • C#中通过反射将枚举元素加载到ComboBo的实现方法

    C#中通过反射将枚举元素加载到ComboBox的实现方法可以分为以下步骤: 1. 获取枚举类型 首先需要获取对应枚举类型,可以使用typeof关键字获取: Type enumType = typeof(MyEnumType); 也可以使用GetType方法获取: MyEnumType obj = new MyEnumType(); Type enumType…

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