该网站是需要登录才能进行数据采集的
我用的是HttpWebRequest的方式
在POST登录信息时出现了问题访网站登录信息存储的SESSION中。
CookieContainer cc = new CookieContainer();
            HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create(new Uri(LoginUrl));
            webRequest2.CookieContainer = cc;
            webRequest2.Method = "POST";
            webRequest2.ContentType = "application/x-www-form-urlencoded";
            webRequest2.ContentLength = byteArray.Length;
            string postData = "txtUserName=" + loginName + "&txtPassword=" + password + "&txtCode=" + GetCodeStr();
            byte[] byteArray = Encoding.UTF8.GetBytes(postData); // 转化            
            Stream newStream = webRequest2.GetRequestStream();
            // Send the data.
            newStream.Write(byteArray, 0, byteArray.Length);    //写入参数
            newStream.Close();            HttpWebResponse response2 = (HttpWebResponse)webRequest2.GetResponse();
            StreamReader sr2 = new StreamReader(response2.GetResponseStream(), Encoding.UTF8);
            string text2 = sr2.ReadToEnd();
这样POST数据到那个地址,好像是没用的。
我是不是应该要先访问这个网站,再进行POST
在POST时,是不是还要把网页保存的状态也POST过去呢?
例如:
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTExMzYyODQwNzcPZBYCZg9kFgICAw9kFgQCAQ8WAh4LXyFJdGVtQ291bnQCARYCZg9kFgJmDxUCATncAuW4jOacm+WFjei0ueS6q+WPl+S4k+S4muWnlOaJmOaLm+WVhuacjeWKoeeahOW5v+WRiuWuouaIt+S7rOivt+azqOaEj+S6hu+8muWNs+aXpei1t+WQkeaQnOWuouWMu+iNr+WnlOaJmOaLm+WVhumDqOaPkOWHuueUs+ivt++8jOetvuiuouWnlOaJmOaLm+WVhuWNj+iuru+8jOW5tuihpem9kOebuOWFs+i1hOi0qOOAguWnlOaJmOaLm+WVhuWboumYn+S9nOS4uuS4k+S4mueahOesrOS4ieaWueWqkuS9k++8jOavj+WkqeWQkeS7o+eQhuWVhuaOqOiNkOWuo+S8oOW5v+WRiuWuouaIt+eahOaLm+WVhuS6p+WTge+8jOS/g+S9v+aIkOS6pOOAguebuOW9k+S6juaLm+WVhuS8geS4muesrOS6jOS4quaLm+WVhumDqOOAgmQCBQ8PFgIeBFRleHQFGzIwMTDlubQxMeaciDI45pelIOaYn+acn+aXpWRkZKpD/kubxwKdIGJ+iu+bjXZ73s9A" />这意味着要把页面很多东西都要POST过去啊。
这样是不是很麻烦了。求解中。

解决方案 »

  1.   

    HttpWebResponse可以先得到服务器返回的cookie对象.
    然后将此对象附加,然后再发出请求.
      

  2.   

    需要有cookie,先获取cookie
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("");
    req.CookieContainer = new CookieContainer();
    HttpWebResponse resp = (HttpWebResponse)req1.GetResponse();
    resp.Close();HttpWebRequest req2 = (HttpWebRequest)WebRequest.Create("");
    req2.CookieContainer = req1.CookieContainer;
    HttpWebResponse resp2 = (HttpWebResponse)req2.GetResponse();
    string strContext = new StreamReader(resp2.GetResponseStream(), Encoding.UTF8).ReadToEnd();
    resp2.Close();