C# WinForm 实现 HTTP 请求(GET/POST)

Oliver
Oliver
发布时间:2026-10-15 | 4人浏览过
原创

本文将介绍如何在 C# WinForm 应用程序中利用 HttpWebRequest 和 HttpWebResponse 类实现标准的 HTTP GET 和 POST 请求,包含详细的代码示例及关键参数设置。

核心实现原理

在 .NET Framework 中,主要通过 System.Net.HttpWebRequest 创建请求对象,并通过 System.Net.HttpWebResponse 接收响应。其标准操作顺序如下:

  1. 创建请求对象:通过 WebRequest.Create(url) 创建 HttpWebRequest 实例,该对象用于封装 HTTP 请求的各项元数据。
  2. 配置请求属性:设置 Method(如 GET 或 POST)、ContentType(内容类型)、ContentLength(请求体长度)以及 Header 信息等。
  3. 获取响应:调用 GetResponse() 方法向服务器发送请求,获取包含响应头和响应体的 HttpWebResponse 对象。
  4. 解析响应:从响应的 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 网络编程的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表