服务器有时会压缩其响应以节省带宽,当这种情况发生时,您需要在尝试读取响应之前对其进行解压缩。幸运的是,.NET框架可以自动执行此 *** 作,但是,我们必须打开该设置。
这是如何实现此目的的示例。
string html = string.Empty;string url = @"https://api.stackexchange.com/2.2/answers?order=desc&sort=activity&site=stackoverflow";HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.AutomaticDecompression = DecompressionMethods.GZip;using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())using (Stream stream = response.GetResponseStream())using (StreamReader reader = new StreamReader(stream)){ html = reader.ReadToEnd();}Console.WriteLine(html);
编辑 17/11/23
更新以抛出使用GET请求和POST异步的示例
得到
public string Get(string uri){ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; using(HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using(Stream stream = response.GetResponseStream()) using(StreamReader reader = new StreamReader(stream)) { return reader.ReadToEnd(); }}
取得异步
public async Task<string> GetAsync(string uri){ HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; using(HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) using(Stream stream = response.GetResponseStream()) using(StreamReader reader = new StreamReader(stream)) { return await reader.ReadToEndAsync(); }}
POST 在您希望使用其他HTTP方法(例如PUT,DELETE和ETC)时
包含参数method
public string Post(string uri, string data, string contentType, string method = "POST"){ byte[] dataBytes = Encoding.UTF8.GetBytes(data); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; request.ContentLength = dataBytes.Length; request.ContentType = contentType; request.Method = method; using(Stream requestBody = request.GetRequestStream()) { requestBody.Write(dataBytes, 0, dataBytes.Length); } using(HttpWebResponse response = (HttpWebResponse)request.GetResponse()) using(Stream stream = response.GetResponseStream()) using(StreamReader reader = new StreamReader(stream)) { return reader.ReadToEnd(); }}
POST异步 在您希望使用其他HTTP方法(例如PUT,DELETE和ETC)时
包含参数method
public async Task<string> PostAsync(string uri, string data, string contentType, string method = "POST"){ byte[] dataBytes = Encoding.UTF8.GetBytes(data); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; request.ContentLength = dataBytes.Length; request.ContentType = contentType; request.Method = method; using(Stream requestBody = request.GetRequestStream()) { await requestBody.WriteAsync(dataBytes, 0, dataBytes.Length); } using(HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync()) using(Stream stream = response.GetResponseStream()) using(StreamReader reader = new StreamReader(stream)) { return await reader.ReadToEndAsync(); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)