C# HttpWebRequest GET 方式提交中文数据浅析

本文详细介绍了如何使用C#的HttpWebRequest类通过GET和POST方式提交数据至服务器,包括处理中文数据的具体方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C# HttpWebRequest提交数据方式其实就是GET和POST两种,那么具体的实现以及操作注意事项是什么呢?那么本文就向你详细介绍C# HttpWebRequest提交数据方式的这两种利器。

C# HttpWebRequest提交数据方式学习之前我们先来看看什么是HttpWebRequest,它是 .net 基类库中的一个类,在命名空间 System.Net 下面,用来使用户通过HTTP协议和服务器交互。

C# HttpWebRequest的作用:

HttpWebRequest对HTTP协议进行了完整的封装,对HTTP协议中的 Header, Content, Cookie 都做了属性和方法的支持,很容易就能编写出一个模拟浏览器自动登录的程序。

C# HttpWebRequest提交数据方式:

程序使用HTTP协议和服务器交互主要是进行数据的提交,通常数据的提交是通过 GET 和 POST 两种方式来完成,下面对这两种方式进行一下说明:

C# HttpWebRequest提交数据方式1. GET 方式。

GET 方式通过在网络地址附加参数来完成数据的提交,比如在地址 http://www.google.com/webhp?hl=zh-CN 中,前面部分 http://www.google.com/webhp 表示数据提交的网址,后面部分 hl=zh-CN 表示附加的参数,其中 hl 表示一个键(key), zh-CN 表示这个键对应的值(value)。程序代码如下:

HttpWebRequest req =   

(HttpWebRequest) HttpWebRequest.Create(   

"http://www.google.com/webhp?hl=zh-CN" );  

req.Method = "GET";  

using (WebResponse wr = req.GetResponse())  

{  

   //在这里对接收到的页面内容进行处理  

C# HttpWebRequest提交数据方式2. POST 方式。

POST 方式通过在页面内容中填写参数的方法来完成数据的提交,参数的格式和 GET 方式一样,是类似于 hl=zh-CN&newwindow=1 这样的结构。程序代码如下:

string param = "hl=zh-CN&newwindow=1";  

byte[] bs = Encoding.ASCII.GetBytes(param);  

 

HttpWebRequest req =   

(HttpWebRequest) HttpWebRequest.Create(   

"http://www.google.com/intl/zh-CN/" );  

req.Method = "POST";  

req.ContentType = "application/x-www-form-urlencoded";  

req.ContentLength = bs.Length;  

using (Stream reqStream = req.GetRequestStream())  

{  

   reqStream.Write(bs, 0, bs.Length);  

}  

using (WebResponse wr = req.GetResponse())  

{  

   //在这里对接收到的页面内容进行处理  

}  

在上面的代码中,我们访问了 www.google.com 的网址,分别以 GET 和 POST 方式提交了数据,并接收了返回的页面内容。然而,如果提交的参数中含有中文,那么这样的处理是不够的,需要对其进行编码,让对方网站能够识别。

C# HttpWebRequest提交数据方式3. 使用 GET 方式提交中文数据。

GET 方式通过在网络地址中附加参数来完成数据提交,对于中文的编码,常用的有 gb2312 和 utf8 两种,用 gb2312 方式编码访问的程序代码如下:

Encoding myEncoding = Encoding.GetEncoding("gb2312");  

string address = "http://www.baidu.com/s?"   

+ HttpUtility.UrlEncode("参数一", myEncoding) +  

 "=" + HttpUtility.UrlEncode("值一", myEncoding);  

HttpWebRequest req =   

(HttpWebRequest)HttpWebRequest.Create(address);  

req.Method = "GET";  

using (WebResponse wr = req.GetResponse())  

{  

   //在这里对接收到的页面内容进行处理  

}  

在上面的程序代码中,我们以 GET 方式访问了网址 http://www.baidu.com/s ,传递了参数“参数一=值一”,由于无法告知对方提交数据的编码类型,所以编码方式要以对方的网站为标准。常见的网站中, www.baidu.com (百度)的编码方式是 gb2312, www.google.com (谷歌)的编码方式是 utf8。

C# HttpWebRequest提交数据方式4. 使用 POST 方式提交中文数据。

POST 方式通过在页面内容中填写参数的方法来完成数据的提交,由于提交的参数中可以说明使用的编码方式,所以理论上能获得更大的兼容性。用 gb2312 方式编码访问的程序代码如下:

Encoding myEncoding = Encoding.GetEncoding("gb2312");  

string param =   

HttpUtility.UrlEncode("参数一", myEncoding) +   

"=" + HttpUtility.UrlEncode("值一", myEncoding) +   

"&" + HttpUtility.UrlEncode("参数二", myEncoding) +  

"=" + HttpUtility.UrlEncode("值二", myEncoding);  

byte[] postBytes = Encoding.ASCII.GetBytes(param);  

HttpWebRequest req = (HttpWebRequest)  

HttpWebRequest.Create( "http://www.baidu.com/s" );  

req.Method = "POST";  

req.ContentType =   

"application/x-www-form-urlencoded;charset=gb2312";  

req.ContentLength = postBytes.Length;  

using (Stream reqStream = req.GetRequestStream())  

{  

   reqStream.Write(bs, 0, bs.Length);  

}  

using (WebResponse wr = req.GetResponse())  

{  

   //在这里对接收到的页面内容进行处理  

}   

从上面的代码可以看出, POST 中文数据的时候,先使用 UrlEncode 方法将中文字符转换为编码后的 ASCII 码,然后提交到服务器,提交的时候可以说明编码的方式,用来使对方服务器能够正确的解析。

以上列出了客户端程序使用HTTP协议与服务器交互的情况,常用的是 GET 和 POST 方式。现在流行的 WebService 也是通过 HTTP 协议来交互的,使用的是 POST 方法。与以上稍有所不同的是, WebService 提交的数据内容和接收到的数据内容都是使用了 XML 方式编码。所以, HttpWebRequest 也可以使用在调用 WebService 的情况下。

C# HttpWebRequest提交数据方式的基本内容就向你介绍到这里,希望对你了解和学习C# HttpWebRequest提交数据方式有所帮助。

<think>我们参考引用[1]和引用[2]中关于HTTP请求的代码示例,特别是如何添加请求头(Authorization)的部分。根据用户需求,我们需要在GET请求中添加BearerToken认证。引用[1]中提供了GET请求的基本结构,并展示了如何添加Authorization请求头。引用[2]中展示了POST请求如何添加参数和请求头,但我们可以借鉴添加请求头的方法。步骤:1.创建HttpWebRequest对象,指定URL。2.设置请求方法为GET。3.请求头中添加Authorization,值为"Bearer<token>"。4.获取响应并读取内容。注意:BearerToken的格式是:Bearer后面跟一个空格,然后是token字符串。示例代码:```stringurl="https://example.com/api/data";//替换为实际URLstringtoken="your_token_here";//替换为实际tokenHttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(url);request.Method="GET";request.Headers.Add("Authorization","Bearer"+token);//添加BearerToken//设置超时等属性(可选)request.Timeout=20000;//20秒超时try{using(HttpWebResponseresponse=(HttpWebResponse)request.GetResponse()){//检查响应状态if(response.StatusCode==HttpStatusCode.OK){using(StreamresponseStream=response.GetResponseStream())using(StreamReaderreader=newStreamReader(responseStream,Encoding.UTF8)){stringresponseText=reader.ReadToEnd();Console.WriteLine(responseText);//处理响应内容,例如解析JSON等}}else{Console.WriteLine($"请求失败,状态码:{response.StatusCode}");}}}catch(WebExceptionex){//处理异常,例如超时或网络错误Console.WriteLine($"请求发生异常:{ex.Message}");if(ex.Response!=null){using(varerrorResponse=(HttpWebResponse)ex.Response){using(StreamerrorStream=errorResponse.GetResponseStream())using(StreamReadererrorReader=newStreamReader(errorStream)){stringerrorText=errorReader.ReadToEnd();Console.WriteLine($"错误响应内容:{errorText}");}}}}```注意:在实际使用中,请将url和token替换为实际值。另外,引用[2]中提到了POST请求的示例,但这里我们只需要GET请求。如果token是通过其他方式获取的(例如OAuth2.0授权),请确保在请求前已经获取到有效的token。相关问题:1.如何处理BearerToken过期的情况?2.C#中,除了HttpWebRequest,还有哪些方式可以发送HTTP请求(如HttpClient)?3.如何为HttpWebRequest设置代理?4.如何异步发送HttpWebRequest请求?5.如何添加多个请求头?6.如何处理HTTPS请求的证书问题?</think>### C# HttpWebRequest GET 请求添加 Bearer Token 示例 在 C# 中使用 `HttpWebRequest` 添加 Bearer Token 认证的完整步骤如下: ```csharp using System; using System.IO; using System.Net; using System.Text; public class HttpRequestHelper { public static string GetWithBearerToken(string url, string token) { try { // 创建请求对象 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.ContentType = "application/json"; request.Timeout = 30000; // 30秒超时 // 添加 Bearer Token 认证头 request.Headers.Add("Authorization", $"Bearer {token}"); // 获取响应 using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using (Stream responseStream = response.GetResponseStream()) using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8)) { return reader.ReadToEnd(); } } catch (WebException ex) { // 处理错误响应 if (ex.Response is HttpWebResponse errorResponse) { using (Stream errorStream = errorResponse.GetResponseStream()) using (StreamReader errorReader = new StreamReader(errorStream)) { string errorContent = errorReader.ReadToEnd(); throw new Exception($"HTTP Error {(int)errorResponse.StatusCode}: {errorContent}"); } } throw; } } } // 使用示例 string apiUrl = "https://api.example.com/data"; string accessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; try { string result = HttpRequestHelper.GetWithBearerToken(apiUrl, accessToken); Console.WriteLine("API响应: " + result); } catch (Exception ex) { Console.WriteLine("请求失败: " + ex.Message); } ``` #### 关键说明: 1. **认证头设置**:通过 `request.Headers.Add("Authorization", $"Bearer {token}")` 添加 Bearer Token 2. **错误处理**:捕获 `WebException` 并解析错误响应内容 3. **资源释放**:使用 `using` 语句确保响应流正确关闭 4. **超时设置**:`Timeout` 属性控制请求等待时间(毫秒) > 注意:Bearer Token 通常由 OAuth2.0 认证流程获取,格式为 `Bearer <token>`,其中 token 是 JWT 或其他类型的访问令牌[^1]。 #### 常见问题排查: 1. **401 未授权错误**: - 检查 token 是否过期 - 验证 token 格式是否正确(需包含 `Bearer` 前缀) - 确认 API 所需的权限范围 2. **性能优化**: - 复用 `HttpWebRequest` 对象(注意线程安全) - 异步处理使用 `BeginGetResponse/EndGetResponse` - 添加压缩支持:`request.AutomaticDecompression = DecompressionMethods.GZip` 3. **安全建议**: - 使用 HTTPS 加密传输 - 避免在代码中硬编码 token(使用安全存储) - 定期轮换访问令牌
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值