C# WinForm 实现 HTTP 请求(GET/POST)
本文将介绍如何在 C# WinForm 应用程序中利用 HttpWebRequest 和 HttpWebResponse 类实现标准的 HTTP GET 和 POST 请求,包含详细的代码示例及关键参数设置。
核心实现原理
在 .NET Framework 中,主要通过 System.Net.HttpWebRequest 创建请求对象,并通过 System.Net.HttpWebResponse 接收响应。其标准操作顺序如下:
- 创建请求对象:通过
WebRequest.Create(url)创建HttpWebRequest实例,该对象用于封装 HTTP 请求的各项元数据。 - 配置请求属性:设置
Method(如 GET 或 POST)、ContentType(内容类型)、ContentLength(请求体长度)以及 Header 信息等。 - 获取响应:调用
GetResponse()方法向服务器发送请求,获取包含响应头和响应体的HttpWebResponse对象。 - 解析响应:从响应的
GetResponseStream()中读取字节流,使用StreamReader或Encoding.UTF8将其转换为字符串文本。
GET 与 POST 方法的差异
HTTP 协议定义了多种交互方式,在 WinForm 开发中常用的是 GET 和 POST,主要区别如下:
- 数据传输位置:
GET将参数附加在 URL 之后(如?name=value),用户可在浏览器地址栏可见;POST将数据放在请求体(Request Body)中,对默认不可见。 - 安全性与容量:
GET数据受 URL 长度限制且安全性较低(易被日志记录);POST理论上无数据量限制,安全性更高。 - 服务端接收方式:
GET通常对应服务器的Request.QueryString,POST对应Request.Form。
第一步:实现 GET 请求
目的:获取指定 URL 的资源内容。
入口:目标 URL。
动作:无需设置 Content-Length 或 RequestStream,直接调用 GetResponse 即可。
string strURL = "http://localhost/WinformSubmit.php?tel=11111&name=张三";
// 1. 创建请求
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
// 2. 执行请求
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
// 3. 读取响应
System.IO.StreamReader myreader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8);
string responseText = myreader.ReadToEnd();
myreader.Close();
MessageBox.Show(responseText);
第二步:实现 POST 请求
目的:向服务器提交编码后的数据。
入口:目标 URL 和参数字符串。
重要参数需手动设置 Method="POST"、ContentType="application/x-www-form-urlencoded"。
string strURL = "http://localhost/WinformSubmit.php";
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
// 1. 设置请求属性
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
// 2. 参数编码(例如 key=keyword, val=多月)
string paraUrlCoded = System.Web.HttpUtility.UrlEncode("keyword") + "=" + System.Web.HttpUtility.UrlEncode("多月");
// 3. 转换为字节流
byte[] payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
request.ContentLength = payload.Length;
// 4. 写入请求体
using (System.IO.Stream writer = request.GetRequestStream())
{
writer.Write(payload, 0, payload.Length);
}
// 5. 获取响应
using (System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse())
{
using (System.IO.StreamReader myreader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
string responseText = myreader.ReadToEnd();
MessageBox.Show(responseText);
}
}
第三步:处理复杂响应(以百度首页为例)
结果或目标:完整获取并解析带有 Head 信息和 Body 内容的 HTTP 响应,防止因缓冲不足导致截断。
//请求
string uri = "http://www.baidu.com";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Method = "GET"; //请求方法
request.ProtocolVersion = new Version(1, 1); //Http/1.1版本
HttpWebResponse response=request.GetResponse() as HttpWebResponse;
//输出Header
foreach (var item in response.Headers)
{
this.txt_Header.Text += item.ToString()+": " +
response.GetResponseHeader(item.ToString())
+ System.Environment.NewLine;
}
//如果主体信息不为空,则接收主体信息内容
if (response.ContentLength <= 0)
return;
//接收响应主体信息
using(Stream stream =response.GetResponseStream())
{
int totalLength=(int)response.ContentLength;
int numBytesRead=0;
byte[] bytes=new byte[totalLength+1024];
//通过一个循环读取流中的数据,读取完毕,跳出循环
while( numBytesRead < totalLength )
{
int num=stream.Read(bytes,numBytesRead,1024); //每次希望读取1024字节
if( num==0 ) //说明流中数据读取完毕
break;
numBytesRead+=num;
}
}
//将接收到的主体数据显示到界面
string content=Encoding.UTF8.GetString(bytes);
this.txt_Content.Text=content;以上就是 C# WinForm 实现 HTTP GET/POST 请求的详细内容,更多关于 C# WinForm HTTP 网络编程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













