public
string GetHtml(
string url)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
string code = DecodeData(url);
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
request.Timeout = 30000;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
request.Headers.Set(
"Pragma",
"no-cache");
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
Stream streamReceive = response.GetResponseStream();
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
Encoding encoding = code !=
string.Empty ? Encoding.GetEncoding(code.ToUpper()) : Encoding.Default;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
StreamReader streamReader =
new StreamReader(streamReceive, encoding);
string strResult = streamReader.ReadToEnd();
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
streamReader.Close();
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
streamReader.Dispose();
return strResult;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
//http://blog.sunmast.com/natas/archive/2004/10/30/989.aspx,略有改动.
private
string DecodeData(
string Url)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
WebRequest r = WebRequest.Create(Url);
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
WebResponse w = r.GetResponse();
//
// first see if content length header has charset = calue
//
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
String charset =
string.Empty;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
String ctype = w.Headers[
"content-type"];
if (ctype !=
null)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
int ind = ctype.IndexOf(
"charset=");
if (ind != -1)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
charset = ctype.Substring(ind + 8);
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
// save data to a memorystream
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
MemoryStream rawdata =
new MemoryStream();
byte[] buffer =
new
byte[1024];
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
Stream rs = w.GetResponseStream();
int read = rs.Read(buffer, 0, buffer.Length);
while (read > 0)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
rawdata.Write(buffer, 0, read);
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
read = rs.Read(buffer, 0, buffer.Length);
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
rs.Close();
//
// if ContentType is null, or did not contain charset, we search in body
//
if (charset ==
null)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
MemoryStream ms = rawdata;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
ms.Seek(0, SeekOrigin.Begin);
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
StreamReader srr =
new StreamReader(ms, Encoding.ASCII);
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
String meta = srr.ReadToEnd();
if (meta !=
null)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
int start_ind = meta.IndexOf(
"charset=");
int end_ind = -1;
if (start_ind != -1)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
end_ind = meta.IndexOf(
"\"", start_ind);
if (end_ind != -1)
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
{
int start = start_ind + 8;
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
charset = meta.Substring(start, end_ind - start + 1);
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
charset = charset.TrimEnd(
new Char[] { '>', '"' });
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}
return charset.ToString();
![InBlock.gif](https://s1.51cto.com/images/editer/InBlock.gif)
}