首页新闻找找看学习计划

c#GET取网页但是ReadToEnd()返回数据总是为空,请教这是为什么

0
悬赏园豆:120 [待解决问题]
if (!url.Contains("http"))
                {
                    url = "http://" + url;
                }
                HttpWebRequest request = null;
                try
                {
                    request = WebRequest.Create(url) as HttpWebRequest;
                }
                catch (Exception e)
                {
                    cc = null;
                    return e.Message;
                }
                request.CookieContainer = new CookieContainer();
                request.Method = "GET";
                request.UserAgent = DefaultUserAgent;
                request.Timeout = timeout.Value;
                request.KeepAlive = DefaultKeep_Alive;
                request.AllowAutoRedirect = false;
           

                if (old_url != null)
                {
                    request.Referer = old_url;
                }
                if (setcook != null)
                {
                    if (setcook.Count == 0)
                    {
                        
                        setcook = request.CookieContainer;
                    }
                    else
                    {
                        request.CookieContainer = setcook;
                    }

                }

                try
                {
                    HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                    StreamReader reader = new StreamReader(response.GetResponseStream(), DefaultEncoding);
                    cc = response.Cookies;
                    string htmlData = reader.ReadToEnd();
                    response.Close();
                    reader.Close();
                    return htmlData;
                }

 我详细阐述一下问题,我是登录115网盘。当时遇到重定向但是设置AllowAutoRedirect后总是报重定向次数过多,所以我就手动做了重定向的设置但是遇到一个问题。当我取到了一个登录成功需要重定向访问的URL地址。这时我的Cookie是取到了,地址也有了。只要把在GET访问中带上Cookie访问这个地址就成功了。这个原理是对的,因为最后面我也是这样成功登录的,不过在这中间出了一个问题如上面的代码。htmldata总是访问空值,经我检查总是感觉Cookie没有一起提交上去才会这样的,但是Cookie一定是对的地址也是对的。

 

所以想问问高手前辈们这里是不是我哪里出错了,导致我总是得不到数据。注:我提交的数据用第三方软件提交是完全没问题的,包括cookie与URL地址还有编码什么的。。。真心请教。。。

代码白痴的主页 代码白痴 | 初学一级 | 园豆:11
提问于:2012-04-10 23:27
< >
分享
所有回答(2)
0

调试一下看返回空时的Http响应头中有什么信息。

玉开 | 园豆:8822 (大侠五级) | 2012-04-11 09:13

就算这样写result也是不为null。。。取响应头仍然有一个response.Headers["Location"]。。这个属性。。这是将要重定向的地址。。。也就是说刚刚上面的代码并没有错,只是cookie没有加上去。但是我的cooke是CookieContainer明明是赋值上去了怎么会没有用?后来我将cookie转换成字符串,添加在request.Headers[HttpRequestHeader.Cookie] = Lcook。。。。几乎是上面一模一样的代码可就成功了。。。这是为什么,不过成功了却无法从response.Cookies取回cookie因为那里的值为空。。。。请朋友们帮忙看看啊这个问题纠结了一晚上了。。。觉都没睡好。。。

支持(0) 反对(0) 代码白痴 | 园豆:11 (初学一级) | 2012-04-11 12:10

@代码白痴: 

你的问题在于改设的Cookie没有设置上

用WebClient类吧,这个类是对HttpWebRequest的封装,你可以直接在Headers属性中设置Cookie的值。

http://msdn.microsoft.com/en-US/library/system.net.webclient.headers(v=vs.80).aspx

支持(0) 反对(0) 玉开 | 园豆:8822 (大侠五级) | 2012-04-11 13:23
0

建议代码这样写:

using (var result = webRequest.GetResponse())
{
    if (result != null)
    {
        using (var sr = new StreamReader(result.GetResponseStream(), Encoding.UTF8))
        {
            string htmlData = reader.ReadToEnd();
        }
    }
}

通过 webRequest.GetResponse().Headers 看一下HTTP响应头信息。

dudu | 园豆:38720 (高人七级) | 2012-04-11 10:52

就算这样写result也是不为null。。。取响应头仍然有一个response.Headers["Location"]。。这个属性。。这是将要重定向的地址。。。也就是说刚刚上面的代码并没有错,只是cookie没有加上去。但是我的cooke是CookieContainer明明是赋值上去了怎么会没有用?后来我将cookie转换成字符串,添加在request.Headers[HttpRequestHeader.Cookie] = Lcook。。。。几乎是上面一模一样的代码可就成功了。。。这是为什么,不过成功了却无法从response.Cookies取回cookie因为那里的值为空。。。。请朋友们帮忙看看啊这个问题纠结了一晚上了。。。觉都没睡好。。。

支持(0) 反对(0) 代码白痴 | 园豆:11 (初学一级) | 2012-04-11 12:09

@代码白痴:

参考文章:C# HttpWebRequest 绝技

支持(0) 反对(0) dudu | 园豆:38720 (高人七级) | 2012-04-11 17:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册