非常标准的HttpWebRequest实现,每当我传递某个URL来获取html时,它都会返回,只有特殊字符。回来的一个例子如下。
现在这个网站是SSL,所以我想知道这是否与它有关但我以前从来没有遇到过这个问题,而且我已经将它与其他SSL网站一起使用了。
�
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
var request = (HttpWebRequest)WebRequest.Create(url);
using (var response = (HttpWebResponse)request.GetResponse())
{
Stream data = response.GetResponseStream();
HtmlDocument hDoc = new HtmlDocument();
using (StreamReader readURLContent = new StreamReader(data))
{
html = readURLContent.ReadToEnd();
hDoc.LoadHtml(html);
}
}
对于这个具体问题,我真的找不到任何东西,所以如果有人能指出我的方向非常棒,那么我就有点失落。
答案 0 :(得分:0)
我的猜测是响应被压缩了。如果您使用像Charles或Fiddler这样的WebDebugger。您可以看到请求和结构化以及它们包含哪些数据 - 这使得稍后在编写它们时复制http请求变得更加容易。请尝试以下代码。
try
{
string webAddr = url;
var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
httpWebRequest.ContentType = "text/html; charset=utf-8";
httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0";
httpWebRequest.AllowAutoRedirect = true;
httpWebRequest.Method = "GET";
httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8))
{
var responseText = streamReader.ReadToEnd();
doc.LoadHtml(responseText);
}
}
catch (WebException ex)
{
Console.WriteLine(ex.Message);
}
代码在请求中设置编码。您还可以在读取响应时在streamreader处设置编码。并启用自动解压缩。