各位高手帮个忙,刚学习使用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<=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); //到了这一步就不行了
}
}
我想登录账号获得账号的可用积分余额,可登录成功了,在获取下一个页面信息的时候出错了,附上代码如下,请高手指点一下。
盛大通行证登录地址 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<=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); //到了这一步就不行了
}
}
错误提示是
远程服务器返回错误: (414) Request-URI Too Long。
strReDirect的值是 https://cas.sdo.com/authenticationCallback?code=......
strHTML = HTTPGET(strReDirect); //到了这一步就不行了 }
把strReDirect这个Url变量中的最后一个 & 字符简单删除了就可以了,
也就是先if(strReDirect!=null && strReDirect!="")
strReDirect = strReDirect.Trim().SubString(0,strReDirect.Length-1);
strHTML = HTTPGET(strReDirect); //到了这一步就不行了 不过,你在请求的时候,最好指定一下,请求的编码,不然可能会乱码
{
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<=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); //到了这一步就不行了 }
}
}