下面是详细讲解" 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技术站