C#调用WinHttp.WinHttpRequest.5.1 Get网页 乱码问题

woshiklc 2014-01-07 04:25:40

WinHttp winhttp = new WinHttp();
string content = winhttp.Open("GET", "http://su.58.com/", false);
winhttp.Post();
string Hash = winhttp.ResponseBody;

public string Open(string OpenMethod, string URL, bool Async)
{
object obj;
obj = HttpObj.DoMethod("Open", new object[] { OpenMethod, URL, Async });
if (obj != null)
{
_Active = false;
return obj.ToString();
}
else
{
SetRequestHeader("Content-Type", _ContentType);
SetRequestHeader("User-Agent", "Mozilla/5.0");
SetRequestHeader("Cache-Control", "max-age=0");
SetRequestHeader("Accept", "*/*");
SetRequestHeader("Accept-Encoding", "gzip,deflate,sdch");
SetRequestHeader("Accept-Language", "zh-CN,zh;q=0.8");
if (_ContentLength != 0) SetRequestHeader("Content-Length", _ContentLength);
_Active = true;
return "True";
}
}



public string ResponseBody
{
get
{
if (_Active)
{
ComObject AdoStream = new ComObject("Adodb.Stream");
AdoStream["Type"] = 1;
AdoStream["Mode"] = 3;
AdoStream.DoMethod("Open", new object[] { });
AdoStream.DoMethod("Write", new object[1] { HttpObj["ResponseBody"] });
AdoStream["Position"] = 0;
AdoStream["Type"] = 2;
AdoStream["Charset"] = "UTF-8";//这里的编码和网页上的一样

// GZipStream g = new GZipStream((Stream)AdoStream, CompressionMode.Decompress);
// string content = g

return AdoStream["ReadText"].ToString();
}
else return "";
}
}


...全文
752 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshiklc 2014-01-09
  • 打赏
  • 举报
回复
引用 11 楼 wyd1520 的回复:
楼主你用这个Adodb.Stream 是ASP的产物。。是COM+组件研究这做啥。。基本没人用这东西了。
玩玩 哈哈 会的话 指导指导我嘛。。。
本拉灯 2014-01-09
  • 打赏
  • 举报
回复
引用 12 楼 woshiklc 的回复:
[quote=引用 11 楼 wyd1520 的回复:] 楼主你用这个Adodb.Stream 是ASP的产物。。是COM+组件研究这做啥。。基本没人用这东西了。
玩玩 哈哈 会的话 指导指导我嘛。。。[/quote] C#的用10楼的代码就可以了,这是NET自带的解决方案比Adodb.Stream好很多。
本拉灯 2014-01-07
  • 打赏
  • 举报
回复
楼主你用这个Adodb.Stream 是ASP的产物。。是COM+组件研究这做啥。。基本没人用这东西了。
失落的神庙 2014-01-07
  • 打赏
  • 举报
回复
 private string Html(string Url)
        {
            string strResult = "";
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                string ce = response.ContentEncoding;
                Stream streamReceive = response.GetResponseStream();

                Encoding encoding = Encoding.GetEncoding(GetChartset(Url));
                if (ce.ToLower() == "gzip")
                {
                    GZipStream gzip = new GZipStream(streamReceive, CompressionMode.Decompress);
                    using (StreamReader reader = new StreamReader(gzip,encoding))
                    {
                        strResult = reader.ReadToEnd();
                    }

                }
            }
            catch (Exception ex) { HttpContext.Current.Response.Write(ex.ToString()); }
            return strResult;

        }
woshiklc 2014-01-07
  • 打赏
  • 举报
回复
引用 8 楼 wawd74520 的回复:
[quote=引用 5 楼 woshiklc 的回复:] [quote=引用 3 楼 wawd74520 的回复:]
public static string doGet(string Url)
        {
            try
            {
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url.ToString());
                myRequest.ServicePoint.Expect100Continue = true;
                myRequest.Method = "GET";
                myRequest.Timeout = 6000;
                myRequest.KeepAlive = true;//modify by yang
                myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
                myRequest.ContentType = "application/x-www-form-urlencoded";
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
                StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                string outdata = reader.ReadToEnd();
                reader.Close();
                return outdata;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
try 也可以使用默认的 SetRequestHeader("Accept-Encoding", "gzip,deflate,sdch");这个不要试试
还一点 你的这种方法 如果网页是压缩的话 可能你的结果是乱码。。。[/quote] 有处理办法的 呵呵。 gzip么?[/quote]嗯 gzip request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); request.Headers.Add("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3"); request.CookieContainer = cookie; request.AllowAutoRedirect = true; response = (HttpWebResponse)request.GetResponse(); CkCollect = response.Cookies; LocationUrl = response.ResponseUri.ToString(); Stream st; st = response.GetResponseStream(); if (response.ContentEncoding.ToLower().Contains("gzip")) { st = new GZipStream(st, CompressionMode.Decompress, true); } StreamReader stReader = new StreamReader(st, Encoding.UTF8); content = stReader.ReadToEnd();
失落的神庙 2014-01-07
  • 打赏
  • 举报
回复
引用 5 楼 woshiklc 的回复:
[quote=引用 3 楼 wawd74520 的回复:]
public static string doGet(string Url)
        {
            try
            {
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url.ToString());
                myRequest.ServicePoint.Expect100Continue = true;
                myRequest.Method = "GET";
                myRequest.Timeout = 6000;
                myRequest.KeepAlive = true;//modify by yang
                myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
                myRequest.ContentType = "application/x-www-form-urlencoded";
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
                StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                string outdata = reader.ReadToEnd();
                reader.Close();
                return outdata;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
try 也可以使用默认的 SetRequestHeader("Accept-Encoding", "gzip,deflate,sdch");这个不要试试
还一点 你的这种方法 如果网页是压缩的话 可能你的结果是乱码。。。[/quote] 有处理办法的 呵呵。 gzip么?
woshiklc 2014-01-07
  • 打赏
  • 举报
回复
引用 6 楼 wawd74520 的回复:
[quote=引用 4 楼 woshiklc 的回复:] [quote=引用 3 楼 wawd74520 的回复:]
public static string doGet(string Url)
        {
            try
            {
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url.ToString());
                myRequest.ServicePoint.Expect100Continue = true;
                myRequest.Method = "GET";
                myRequest.Timeout = 6000;
                myRequest.KeepAlive = true;//modify by yang
                myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
                myRequest.ContentType = "application/x-www-form-urlencoded";
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
                StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                string outdata = reader.ReadToEnd();
                reader.Close();
                return outdata;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
try 也可以使用默认的 SetRequestHeader("Accept-Encoding", "gzip,deflate,sdch");这个不要试试
这个我会用,只是最近在研究WinHttp.WinHttpRequest.5.1 多谢[/quote] 删掉一些可以默认的试试[/quote]我试试看。。
失落的神庙 2014-01-07
  • 打赏
  • 举报
回复
引用 4 楼 woshiklc 的回复:
[quote=引用 3 楼 wawd74520 的回复:]
public static string doGet(string Url)
        {
            try
            {
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url.ToString());
                myRequest.ServicePoint.Expect100Continue = true;
                myRequest.Method = "GET";
                myRequest.Timeout = 6000;
                myRequest.KeepAlive = true;//modify by yang
                myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
                myRequest.ContentType = "application/x-www-form-urlencoded";
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
                StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                string outdata = reader.ReadToEnd();
                reader.Close();
                return outdata;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
try 也可以使用默认的 SetRequestHeader("Accept-Encoding", "gzip,deflate,sdch");这个不要试试
这个我会用,只是最近在研究WinHttp.WinHttpRequest.5.1 多谢[/quote] 删掉一些可以默认的试试
woshiklc 2014-01-07
  • 打赏
  • 举报
回复
引用 3 楼 wawd74520 的回复:
public static string doGet(string Url)
        {
            try
            {
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url.ToString());
                myRequest.ServicePoint.Expect100Continue = true;
                myRequest.Method = "GET";
                myRequest.Timeout = 6000;
                myRequest.KeepAlive = true;//modify by yang
                myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
                myRequest.ContentType = "application/x-www-form-urlencoded";
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
                StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                string outdata = reader.ReadToEnd();
                reader.Close();
                return outdata;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
try 也可以使用默认的 SetRequestHeader("Accept-Encoding", "gzip,deflate,sdch");这个不要试试
还一点 你的这种方法 如果网页是压缩的话 可能你的结果是乱码。。。
woshiklc 2014-01-07
  • 打赏
  • 举报
回复
引用 3 楼 wawd74520 的回复:
public static string doGet(string Url)
        {
            try
            {
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url.ToString());
                myRequest.ServicePoint.Expect100Continue = true;
                myRequest.Method = "GET";
                myRequest.Timeout = 6000;
                myRequest.KeepAlive = true;//modify by yang
                myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
                myRequest.ContentType = "application/x-www-form-urlencoded";
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
                StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                string outdata = reader.ReadToEnd();
                reader.Close();
                return outdata;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
try 也可以使用默认的 SetRequestHeader("Accept-Encoding", "gzip,deflate,sdch");这个不要试试
这个我会用,只是最近在研究WinHttp.WinHttpRequest.5.1 多谢
失落的神庙 2014-01-07
  • 打赏
  • 举报
回复
public static string doGet(string Url)
        {
            try
            {
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Url.ToString());
                myRequest.ServicePoint.Expect100Continue = true;
                myRequest.Method = "GET";
                myRequest.Timeout = 6000;
                myRequest.KeepAlive = true;//modify by yang
                myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
                myRequest.ContentType = "application/x-www-form-urlencoded";
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
                StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                string outdata = reader.ReadToEnd();
                reader.Close();
                return outdata;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
try 也可以使用默认的 SetRequestHeader("Accept-Encoding", "gzip,deflate,sdch");这个不要试试
woshiklc 2014-01-07
  • 打赏
  • 举报
回复
引用 1 楼 wawd74520 的回复:
AdoStream["Charset"] = "gb2312";
也是乱码。。。。我试了 是否需要GZIP解压缩呢?
失落的神庙 2014-01-07
  • 打赏
  • 举报
回复
AdoStream["Charset"] = "gb2312";

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧