求助,使用C#自动登录网站获取信息遇到个问题,请高手帮忙看一下代码

hbx1982 2010-09-02 10:18:47
各位高手帮个忙,刚学习使用HTTPREQUEST来登录网站获取信息,现在拿盛大通行证做了个测试,遇到了一个问题。
我想登录账号获得账号的可用积分余额,可登录成功了,在获取下一个页面信息的时候出错了,附上代码如下,请高手指点一下。
盛大通行证登录地址 http://www.sdo.com/loginPT.asp

private 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); //到了这一步就不行了
}
}
...全文
359 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
安安zhian 2013-03-20
  • 打赏
  • 举报
回复
string loginUrl = "http://dplogin.sdo.com/dispatchlogin.fcgi?service=http%3A%2F%2Fjf%2Esdo%2Ecom%2FRedirectPage%2Easpx%3Ftarget%3DUserHouse%2FQueryScore%2Easpx"; 可以登录?
云瑀 2010-09-06
  • 打赏
  • 举报
回复
        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<=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); //到了这一步就不行了 }
}
}
烈火蜓蜻 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 hbx1982 的回复:]
各位高手帮个忙,刚学习使用HTTPREQUEST来登录网站获取信息,现在拿盛大通行证做了个测试,遇到了一个问题。
我想登录账号获得账号的可用积分余额,可登录成功了,在获取下一个页面信息的时候出错了,附上代码如下,请高手指点一下。
盛大通行证登录地址 http://www.sdo.com/loginPT.asp

private CookieContainer myCookieContain……
[/Quote]

strHTML = HTTPGET(strReDirect); //到了这一步就不行了 }


把strReDirect这个Url变量中的最后一个 & 字符简单删除了就可以了,
也就是先

if(strReDirect!=null && strReDirect!="")
strReDirect = strReDirect.Trim().SubString(0,strReDirect.Length-1);
strHTML = HTTPGET(strReDirect); //到了这一步就不行了

不过,你在请求的时候,最好指定一下,请求的编码,不然可能会乱码
hbx1982 2010-09-03
  • 打赏
  • 举报
回复
顶顶,请求各位的帮助
dean615 2010-09-02
  • 打赏
  • 举报
回复
MARK,明天来看下
hbx1982 2010-09-02
  • 打赏
  • 举报
回复
明天早晨要早起,我先睡觉去了,明天我会关注各位的回复,问题解决马上结贴。
先谢过各位了。
porschev 2010-09-02
  • 打赏
  • 举报
回复
调试看一下。。。strReDirect的值。。。
hbx1982 2010-09-02
  • 打赏
  • 举报
回复
谢谢楼上的二位这么晚了还回帖帮忙
错误提示是
远程服务器返回错误: (414) Request-URI Too Long。
strReDirect的值是 https://cas.sdo.com/authenticationCallback?code=......
wuyq11 2010-09-02
  • 打赏
  • 举报
回复
提示什么错误
孟子E章 2010-09-02
  • 打赏
  • 举报
回复
你看看strReDirect是否ish一个正确的地址

111,097

社区成员

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

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

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