各位高手帮个忙,刚学习使用HTTPREQUEST来登录网站获取信息,现在拿盛大通行证做了个测试,遇到了一个问题。
我想登录账号获得账号的可用积分余额,可登录成功了,在获取下一个页面信息的时候出错了,附上代码如下,请高手指点一下。
盛大通行证登录地址 http://www.sdo.com/loginPT.aspprivate CookieContainer myCookieContainer;
private Encoding charset = Encoding.GetEncoding("GB2312");private string HTTPGET(string url)
{
    string outdata;
    HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    myHttpWebRequest.CookieContainer = myCookieContainer;
    HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
    myHttpWebResponse.Cookies = myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);
    Stream myResponseStream = myHttpWebResponse.GetResponseStream();
    StreamReader myStreamReader = new StreamReader(myResponseStream, charset);
    outdata = myStreamReader.ReadToEnd();
    myStreamReader.Close();
    myResponseStream.Close();
    return outdata;
}private string HTTPPOST(string url, string postData)
{
    string outdata;    HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
    myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
    myHttpWebRequest.ContentLength = postData.Length;
    myHttpWebRequest.Method = "POST";
    myHttpWebRequest.CookieContainer = myCookieContainer;    Stream myRequestStream = myHttpWebRequest.GetRequestStream();
    StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.Default);
    myStreamWriter.Write(postData);
    myStreamWriter.Close();
    myRequestStream.Close();    HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
    myHttpWebResponse.Cookies = myCookieContainer.GetCookies(myHttpWebRequest.RequestUri);
    Stream myResponseStream = myHttpWebResponse.GetResponseStream();
    StreamReader myStreamReader = new StreamReader(myResponseStream, charset);
    outdata = myStreamReader.ReadToEnd();
    myStreamReader.Close();
    myResponseStream.Close();    return outdata;
}private void btnStart_Click(object sender, EventArgs e)
{
    string strHTML = string.Empty;
    //登录
    myCookieContainer = new CookieContainer();
    string loginUrl = "http://dplogin.sdo.com/dispatchlogin.fcgi?service=http%3A%2F%2Fjf%2Esdo%2Ecom%2FRedirectPage%2Easpx%3Ftarget%3DUserHouse%2FQueryScore%2Easpx";
    string loginPost = "warn=false&lt=test&_eventId=submit&idtype=0&gamearea=0&gametype=0&username={0}&password={1}&ekey=&challenge=&domaink=jf.sdo.com&templateId=&sdid=&pageType=&infoEx=&uid=&appArea=0&appId=0&service=http%3A%2F%2Fjf.sdo.com%2FRedirectPage.aspx%3Ftarget%3DUserHouse%2FQueryScore.aspx&code=2";
    strHTML = HTTPPOST(loginUrl, string.Format(loginPost, "da3fdsds", "1230"));    if (strHTML.Contains("通行证和密码不匹配"))
    {
        //
    }
    else
    {
        string strReDirect = Regex.Match(strHTML, "location.href=.*", RegexOptions.IgnoreCase).Value;
        strReDirect = strReDirect.Replace("location.href=\"", "").Replace("\";", "");        strHTML = HTTPGET(strReDirect);  //到了这一步就不行了
    }
}

解决方案 »

  1.   

    你看看strReDirect是否ish一个正确的地址
      

  2.   

    谢谢楼上的二位这么晚了还回帖帮忙
    错误提示是
    远程服务器返回错误: (414) Request-URI Too Long。
    strReDirect的值是 https://cas.sdo.com/authenticationCallback?code=......
      

  3.   


    strHTML = HTTPGET(strReDirect); //到了这一步就不行了 }
    把strReDirect这个Url变量中的最后一个 & 字符简单删除了就可以了,
    也就是先if(strReDirect!=null && strReDirect!="")
      strReDirect = strReDirect.Trim().SubString(0,strReDirect.Length-1);
    strHTML = HTTPGET(strReDirect); //到了这一步就不行了  不过,你在请求的时候,最好指定一下,请求的编码,不然可能会乱码
      

  4.   

            private void button2_Click(object sender, RoutedEventArgs e)
            {
                string strHTML = string.Empty;
                //登录
                myCookieContainer = new CookieContainer();
                string loginUrl = "http://dplogin.sdo.com/dispatchlogin.fcgi?service=http%3A%2F%2Fjf%2Esdo%2Ecom%2FRedirectPage%2Easpx%3Ftarget%3DUserHouse%2FQueryScore%2Easpx";
                string loginPost = "warn=false&lt=test&_eventId=submit&idtype=0&gamearea=0&gametype=0&username={0}&password={1}&ekey=&challenge=&domaink=jf.sdo.com&templateId=&sdid=&pageType=&infoEx=&uid=&appArea=0&appId=0&service=http%3A%2F%2Fjf.sdo.com%2FRedirectPage.aspx%3Ftarget%3DUserHouse%2FQueryScore.aspx&code=2";
                strHTML = HTTPPOST(loginUrl, string.Format(loginPost, "da3fdsds", "1230"));            if (strHTML.Contains("通行证和密码不匹配"))
                {
                    // 
                }
                else
                {
                    //string strReDirect = Regex.Match(strHTML, "location.href=.*", RegexOptions.IgnoreCase).Value;
                    //strReDirect = strReDirect.Replace("location.href=\"", "").Replace("\";", "");                string strReDirect = "http://www.sdo.com/index.asp";                strHTML = HTTPGET(strReDirect); //到了这一步就不行了 }
                }
            }
      

  5.   

      string loginUrl = "http://dplogin.sdo.com/dispatchlogin.fcgi?service=http%3A%2F%2Fjf%2Esdo%2Ecom%2FRedirectPage%2Easpx%3Ftarget%3DUserHouse%2FQueryScore%2Easpx";  可以登录?