C#httpwebrequest响应团队中的空白字符
我正在尝试使用C#中的httpwebrequests从Web服务器读取响应。 我使用以下代码:C#httpwebrequest响应团队中的空白字符,c#,httpwebrequest,responsestream,C#,Httpwebrequest,Responsestream,我正在尝试使用C#中的httpwebrequests从Web服务器读取响应。 我使用以下代码: UriBuilder urib = new UriBuilder(); urib.Host = "wikipedia.com"; HttpWebRequest req = WebRequest.CreateHttp(urib.Uri); req.KeepAlive = false; req.Host = "wikipedia.com/"; req.Method = "GET"; HttpWebRe
UriBuilder urib = new UriBuilder();
urib.Host = "wikipedia.com";
HttpWebRequest req = WebRequest.CreateHttp(urib.Uri);
req.KeepAlive = false;
req.Host = "wikipedia.com/";
req.Method = "GET";
HttpWebResponse response = (HttpWebResponse) req.GetResponse();
byte[] buffer = new byte[response.ContentLength];
System.IO.Stream stream = response.GetResponseStream();
stream.Read(buffer, 0, buffer.Length);
Console.WriteLine(System.Text.Encoding.ASCII.GetString(buffer, 0, buffer.Length));
代码确实检索到了正确的数据量(我将用于创建缓冲区的contentlength与控制台输出的长度进行了比较,它们是相同的)。
我的问题是,最后80%左右的响应是空白字符。它们都是0x00。
我用几个页面(包括wikipedia.com)对此进行了测试,由于某种原因,它只是切断了中间文件
我是否误解/误用了使用webrequests的方法,或者有人能在此处发现错误?尝试使用此方法:
public static String GetResponseString(Uri url, CookieContainer cc)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = WebRequestMethods.Http.Get;
request.CookieContainer = cc;
request.AutomaticDecompression = DecompressionMethods.GZip;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
String responseString = reader.ReadToEnd();
response.Close();
return responseString;
}
您的代码有几个问题:
内容类型
标题)响应的本质),推荐的方法是使用。更具体地说,如果您想一次性读取整个流,请使用
您的代码可以缩短为:
HttpWebRequest req = WebRequest.CreateHttp(new Uri("http://wikipedia.org"));
req.Method = WebRequestMethods.Http.Get;
using (var response = (HttpWebResponse)req.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
{
Console.WriteLine(reader.ReadToEnd());
}
这确实有效。但就我的教育而言,是什么造成了差异?我看到的唯一真正的差异是在流上使用压缩/解压缩,以及选择“GET”方法的更漂亮的方式。