C# GET/POST 请求
最后修改于 2023 年 7 月 5 日
C# GET/POST 教程展示了如何在 C# 中发送 HTTP GET POST 请求。 我们使用 WebRequest 和 HttpClient。
HTTP
超文本传输协议 (HTTP) 是一种用于分布式、协作式、超媒体信息系统的应用协议。HTTP 是万维网数据通信的基础。
在示例中,我们使用了 httpbin.org,这是一个免费提供的 HTTP 请求和响应服务,以及 webcode.me,这是一个用于测试的微型 HTML 页面。
HTTP GET
HTTP GET 方法请求指定资源的表示。使用 GET 的请求应该只检索数据。
HTTP POST
HTTP POST 方法将数据发送到服务器。它通常用于上传文件或提交完成的 Web 表单。
C# 使用 WebRequest 的 GET 请求
WebRequest 向指定的统一资源标识符 (URI) 发出请求。
using System.Net; var url = "http://webcode.me"; var request = WebRequest.Create(url); request.Method = "GET"; using var webResponse = request.GetResponse(); using var webStream = webResponse.GetResponseStream(); using var reader = new StreamReader(webStream); var data = reader.ReadToEnd(); Console.WriteLine(data);
该程序创建一个 GET 请求来获取一个简单页面的内容。 它将页面的 HTML 内容打印到控制台。
var request = WebRequest.Create(url);
该请求使用 Create 初始化。
request.Method = "GET";
我们将请求的方法设置为 GET。
using var webResponse = request.GetResponse();
GetResponse 返回一个 Web 响应,其中包含对请求的响应。
using var webStream = webResponse.GetResponseStream();
为了读取数据,我们获取流类的实例,用于从资源读取数据。
using var reader = new StreamReader(webStream); var data = reader.ReadToEnd();
我们从流中读取所有数据。
$ dotnet run
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My html page</title>
</head>
<body>
<p>
Today is a beautiful day. We go swimming and fishing.
</p>
<p>
Hello there. How are you?
</p>
</body>
</html>
C# 使用 WebRequest 的 POST 请求
下一个示例使用 WebRequest 创建一个 POST 请求。
using System.Text;
using System.Net;
using System.Text.Json;
var url = "https://httpbin.org/post";
var request = WebRequest.Create(url);
request.Method = "POST";
var user = new User("John Doe", "gardener");
var json = JsonSerializer.Serialize(user);
byte[] byteArray = Encoding.UTF8.GetBytes(json);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
using var reqStream = request.GetRequestStream();
reqStream.Write(byteArray, 0, byteArray.Length);
using var response = request.GetResponse();
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
using var respStream = response.GetResponseStream();
using var reader = new StreamReader(respStream);
string data = reader.ReadToEnd();
Console.WriteLine(data);
record User(string Name, string Occupation);
我们向 https://httpbin.org/post 页面发送一个 POST 请求。 发送的数据采用 JSON 格式。
var request = WebRequest.Create(url); request.Method = "POST";
我们将请求的方法设置为 POST。
var user = new User("John Doe", "gardener");
var json = JsonSerializer.Serialize(user);
byte[] byteArray = Encoding.UTF8.GetBytes(json);
我们将用户对象序列化为 JSON,并将 JSON 数据转换为字节数组。
using var reqStream = request.GetRequestStream(); reqstream.Write(byteArray, 0, byteArray.Length);
我们使用 GetRequestStream 获取请求的流,并使用 Write 将字节数组写入流中。
using var response = request.GetResponse();
我们使用 GetResponse 获取响应。
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
我们打印响应的状态。
using var respStream = response.GetResponseStream(); using var reader = new StreamReader(respStream); string data = reader.ReadToEnd(); Console.WriteLine(data);
我们从响应流中读取数据。
$ dotnet run
OK
{
"args": {},
"data": "",
"files": {},
"form": {
"{\"Name\":\"John Doe\",\"Occupation\":\"gardener\"}": ""
},
"headers": {
"Content-Length": "43",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"X-Amzn-Trace-Id": "Root=1-5ffb119c-010dea546a9b4c8c370bca46"
},
"json": null,
"origin": "188.167.250.74",
"url": "https://httpbin.org/post"
}
C# 使用 HttpClient 的 GET 请求
HttpClient 提供了一个基类,用于发送 HTTP 请求和接收来自 URI 标识的资源的 HTTP 响应。
using var client = new HttpClient();
var content = await client.GetStringAsync("http://webcode.me");
Console.WriteLine(content);
该程序使用 httpclient 的 GetStringAsync 创建一个异步 GET 请求。
C# 使用 HttpClient 的 POST 请求
以下示例使用 HttpClient 创建一个 POST 请求。
using System.Text;
using System.Text.Json;
var user = new User("John Doe", "gardener");
var json = JsonSerializer.Serialize(user);
var data = new StringContent(json, Encoding.UTF8, "application/json");
var url = "https://httpbin.org/post";
using var client = new HttpClient();
var response = await client.PostAsync(url, data);
string result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
record User(string Name, string Occupation);
使用 PostAsync 发送带有 JSON 有效负载的异步 POST 请求; 使用 ReadAsStringAsync 读取响应。
下一个示例使用 Dictionary 和 FormUrlEncodedContent。 FormUrlEncodedContent 是一个容器,用于存储使用 application/x-www-form-urlencoded MIME 类型编码的名称/值对。
using System.Text;
using System.Text.Json;
var values = new Dictionary<string, string>
{
{ "name", "John Doe" },
{ "occupation", "gardener" }
};
var data = new FormUrlEncodedContent(values);
var url = "https://httpbin.org/post";
using var client = new HttpClient();
var response = await client.PostAsync(url, data);
string result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
在此示例中,数据存储在字典中。 我们将字典放入 FormUrlEncodedContent 容器中。
来源
使用 HttpClient 类发出 HTTP 请求 - 语言参考
在本文中,我们展示了如何在 C# 中生成 GET 和 POST 请求。
作者
列出所有 C# 教程。