HttpWebRequest && WebResponse

本文提供了一个使用C#进行网络请求的简单示例代码,展示了如何通过异步方式发起HTTP GET请求并读取响应内容。
public class Program
    {
        public static void Main(string[] args)
        {
            RequestData("http://www.baidu.com");

            Console.ReadLine();
        }

        public static async void RequestData(string uri)
        {
            HttpWebRequest httpWebRequest = WebRequest.CreateHttp(uri);
            WebResponse webResponse =await httpWebRequest.GetResponseAsync();

            Stream stream = webResponse.GetResponseStream();
            StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8);

            Console.Write(sr.ReadToEnd());
                   
         }
    }

<think>好的,用户想了解如何在C#中使用HttpWebRequest类,特别是需要示例。我需要根据提供的三个引用内容来组织回答,确保结构清晰,并且符合用户的要求。 首先,用户的问题是关于HttpWebRequest的使用方法,所以应该分步骤讲解,比如GET和POST请求。引用1中的代码展示了GET请求的处理,而引用2和3则涉及POST请求的不同情况,比如发送字符串、表单数据和文件。需要将这些代码示例整理成易懂的步骤,并解释关键部分。 接下来,要注意用户可能需要了解异步操作,因为在实际应用中,网络请求通常需要异步处理以避免阻塞主线程。引用中没有直接提到异步方法,但根据经验,HttpWebRequest有BeginGetResponse等方法,或者可以使用async/await,需要补充这部分内容。 另外,异常处理也是关键点,用户需要知道如何处理网络请求中可能出现的错误。引用中的代码都有try-catch块,但可以更详细地说明常见的异常类型和处理方法。 然后,根据用户提供的引用,特别是引用3,提到了HTTPS请求的设置,可能需要解释如何配置证书验证,比如ServicePointManager.ServerCertificateValidationCallback,这部分需要详细说明,因为HTTPS请求的安全设置很重要。 用户还希望生成相关问题,可能需要包括GET和POST的区别、异常处理、异步方法、HTTPS配置等。这些问题应该围绕用户可能遇到的后续疑问展开。 需要检查每个代码示例是否符合C#的最佳实践,比如使用using语句来确保资源释放,编码方式是否正确处理,特别是引用3中的编码可能有问题,应该建议使用UTF-8而不是默认编码。 最后,确保回答结构清晰,分点列出,每个步骤有代码示例和解释,并且语言简洁明了。同时,引用标识要正确对应,例如引用1对应GET方法,引用2和3对应POST的不同情况。</think>### C#HttpWebRequest类的使用方法详解 HttpWebRequest是.NET Framework中用于处理HTTP请求的核心类,支持GET、POST等多种请求方式。以下是关键使用步骤和示例: 一、GET请求获取网页内容 ```csharp public static string GetUrl(string url, string encodingType) { try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); using HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using Stream respStream = response.GetResponseStream(); using StreamReader reader = new StreamReader(respStream, Encoding.GetEncoding(encodingType)); return reader.ReadToEnd(); } catch (WebException ex) { // 处理网络异常 } return ""; } ``` * 特点:自动处理响应流编码 * 注意:使用using确保资源释放[^1] 二、POST请求发送数据 1. 发送表单数据 ```csharp public string PostFormData(string url, string postData) { byte[] buffer = Encoding.UTF8.GetBytes(postData); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = buffer.Length; using (Stream reqStream = request.GetRequestStream()) { reqStream.Write(buffer, 0, buffer.Length); } using HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using StreamReader reader = new StreamReader(response.GetResponseStream()); return reader.ReadToEnd(); } ``` * 关键设置:ContentType和ContentLength[^3] 2. 发送文件(multipart/form-data) ```csharp public string UploadFile(string url, string filePath) { string boundary = "----" + DateTime.Now.Ticks.ToString("x"); byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "multipart/form-data; boundary=" + boundary; request.Method = "POST"; using (Stream reqStream = request.GetRequestStream()) { // 写入文件头 string header = $"Content-Disposition: form-data; name=\"file\"; filename=\"{Path.GetFileName(filePath)}\"\r\nContent-Type: application/octet-stream\r\n\r\n"; reqStream.Write(boundaryBytes, 0, boundaryBytes.Length); reqStream.Write(Encoding.UTF8.GetBytes(header), 0, Encoding.UTF8.GetBytes(header).Length); // 写入文件内容 byte[] fileBytes = File.ReadAllBytes(filePath); reqStream.Write(fileBytes, 0, fileBytes.Length); // 写入结束边界 byte[] endBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); reqStream.Write(endBytes, 0, endBytes.Length); } using HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using StreamReader reader = new StreamReader(response.GetResponseStream()); return reader.ReadToEnd(); } ``` 三、高级配置 1. Cookie处理 ```csharp CookieContainer cookieContainer = new CookieContainer(); void SetCookies(HttpWebRequest request, string url) { request.CookieContainer = cookieContainer; // 自动管理Cookie会话 } ``` * 特点:支持跨请求保持会话状态[^2] 2. HTTPS证书验证(绕过SSL验证) ```csharp ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; ``` * 警告:生产环境应使用正规证书验证 四、异步请求实现 ```csharp public async Task<string> GetAsync(string url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); using WebResponse response = await request.GetResponseAsync(); using Stream stream = response.GetResponseStream(); using StreamReader reader = new StreamReader(stream); return await reader.ReadToEndAsync(); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值