QQ农场外挂遇到了了问题,望高手给与指导

liuxzh1026 2010-02-22 03:56:26
项目是采用VS2008 写的,希望高手帮忙解决:
如何获取QQ农场的数据?
已经实现的:
1>已经可以登录到QQ空间。
2>成功获取了农场的COOKIE:login_time、uin、skey、verifysession

但是,当访问:http://nc.qzone.qq.com/cgi-bin/cgi_farm_index?mod=user&act=run
获取农场信息的时候,如何也弄不到数据,总是提示如下:

"{\"direction\":\"请重新登录 \",\"errorType\":\"timeout\",\"poptype\":3}"


我如何也想不通了,特来求助。
http://files.cnblogs.com/liuxzh1026/WebQQ.rar

注:程序做好以后,所有源代码原汁原味公布。
我的代码
...全文
747 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
booxood 2010-03-01
  • 打赏
  • 举报
回复
关注,

貌似很有意思...
验证码识别 2010-03-01
  • 打赏
  • 举报
回复
彻底模拟HTTP消息
baibushan 2010-02-28
  • 打赏
  • 举报
回复
我以前用c++做过一个qq农场外挂,不过玩了一阵子就没有再搞了,刚开始的时候也出现过你这样的问题,应该是cookies的问题,你可以尝试这样修改一下:首先可以获取全部的本地保存的cookies字符串,然后再将uin,skey这两个字符串接到后面作为整个的cookies发送回去,我以前就是这样干的,可以得到信息的。
xinqinglhj 2010-02-28
  • 打赏
  • 举报
回复
我也做这个东东,正愁不知道怎么做呢?~
guyuelang 2010-02-27
  • 打赏
  • 举报
回复
强人还是多滴
留个印
liuxzh1026 2010-02-27
  • 打赏
  • 举报
回复
qw_zr 厉害
不够,在我的代码里面,即使把登陆以后获取的COOKIE都放提取出来,Sent出去,也不行。

自我感觉好像不是cookie的问题,但是又找不到问题在哪里。
an_ding 2010-02-23
  • 打赏
  • 举报
回复
楼上的强大。。。。。
qw_zr 2010-02-23
  • 打赏
  • 举报
回复
上文我的代码中有个 Const.Cookie ,有必要再说一下它的来历,所以把我写的登陆代码也一起奉上,仅供参考。

private void btnLogin_Click(object sender, EventArgs e)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://ptlogin2.qq.com/login");
string qqId = txtQqId.Text;
string code = txtCode.Text;
string p = QqMd5(txtQqPassword.Text, code);
string postStr = "u=" + qqId + "&p=" + p + "&verifycode=" + code + "&aid=8000108&u1=http%3A%2F%2Fuser.qzone.qq.com%2F" + qqId + "&fp=loginerroralert&h=1&ptredirect=2&ptlang=0&from_ui=1&dumy=";
byte[] b = Encoding.Default.GetBytes(postStr);
request.Method = "Post";
request.CookieContainer = Const.Cookies;
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = b.Length;
Stream stream = request.GetRequestStream();
stream.Write(b, 0, b.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader r = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string html = r.ReadToEnd();
if (html.Contains("完成跳转"))
{
DialogResult = DialogResult.OK;
}
else
{
MessageBox.Show("登陆失败");
}
}
qw_zr 2010-02-23
  • 打赏
  • 举报
回复
你的Cookie明显是太少了。
client.Headers.Add(HttpRequestHeader.Cookie, _verifysession + ";"+_uin + ";" + _skey + ";" + _logintime);
才这么几个,漏掉了很多。
建议你使用 CookieContainer 。

你可以参考一下我的写法。

////////////////////////////////////////
private string Post(string url,string postStr,string referer)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
string farmTime = GetFarmTime(DateTime.Now).ToString();
string farmKey = GetFarmKey(farmTime);
byte[] b = Encoding.Default.GetBytes(postStr);
request.Method = "Post";
request.Referer = referer;
request.CookieContainer = Const.Cookies;
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = b.Length;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; aff-kingsoft-ciba; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
Stream stream = request.GetRequestStream();
stream.Write(b, 0, b.Length);
stream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader r = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string result = r.ReadToEnd();
r.Close();
response.Close();
return result;
}

/// <summary>
/// 得到自己的信息
/// </summary>
private void GetMyInfo()
{
string url = "http://nc.qzone.qq.com/cgi-bin/cgi_farm_index?mod=user&act=run";
string referer = "http://appimg.qq.com/happyfarm/module/Main_v_36.swf";
string farmTime = GetFarmTime(DateTime.Now).ToString();
string farmKey = GetFarmKey(farmTime);
string postStr = "0=http%3A%2F%2Fappimg%2Eqq%2Ecom%2Fhappyfarm%2Fmodule%2Fui%2Fmain%2Ffarmui1%5Fv%5F11%2Eswf%3A239205&1=http%3A%2F%2Fappimg%2Eqq%2Ecom%2Fhappyfarm%2Fmodule%2Fui%2Fmain%2Ffarmui2%5Fv%5F3%2Eswf%3A84829&2=http%3A%2F%2Fappimg%2Eqq%2Ecom%2Fhappyfarm%2Fmodule%2Fui%2Fmain%2Fcommonui%5Fv%5F2%2Eswf%3A34689&3=http%3A%2F%2Fappimg1%2Eqq%2Ecom%2Fhappyfarm%2Fmodule%2Fui%2Fcrops%2FSeeds%2Eswf%3Fv%3D5%3A121403&4=http%3A%2F%2Fappimg1%2Eqq%2Ecom%2Fhappyfarm%2Fmodule%2Fui%2Fcrops%2FSeeds%5F2%2Eswf%3Fv%3D4%3A104972&5=http%3A%2F%2Fappimg1%2Eqq%2Ecom%2Fhappyfarm%2Fmodule%2Fui%2Fcrops%2FSeeds%5F3%2Eswf%3Fv%3D4%3A15506&6=http%3A%2F%2Fappimg1%2Eqq%2Ecom%2Fhappyfarm%2Fmodule%2Fui%2Fcrops%2FFlowers%2Eswf%3Fv%3D4%3A49838&7=http%3A%2F%2Fappimg%2Eqq%2Ecom%2Fhappyfarm%2Fmodule%2Fui%2Fmain%2Ftask%2Eswf%3Fv%3D42%3A35155&8=http%3A%2F%2Fappimg%2Eqq%2Ecom%2Fhappyfarm%2Fmodule%2Fui%2Fmain%2FNPC2%2Eswf%3A10162&9=http%3A%2F%2Fappimg%2Eqq%2Ecom%2Fhappyfarm%2Fmodule%2FMain%5Fv%5F36%2Eswf%3A202152&10=module%2Floading%5Fv%5F9%2Eswf&uIdx=&";
postStr = postStr + "farmTime=" + farmTime + "&farmKey=" + farmKey;
string html = Post(url, postStr, referer);
if (html.Contains("errorType"))
{
MessageBox.Show("错误");
return;
}
Regex re = new Regex(@"""serverTime"":{""time"":(\d*)}");
string serverTimeStr = re.Match(html).Groups[1].Value;
re = new Regex(@"""uId"":(\d*)");
_uId=re.Match(html).Groups[1].Value;
DateTime serverTime = _zeroTime.AddSeconds(double.Parse(serverTimeStr));
DateTime now = DateTime.Now;
_offsetSeconds = (int)((serverTime - now).TotalSeconds); //服务器时间与本地时间的差值
}
zhushoudong 2010-02-23
  • 打赏
  • 举报
回复
还真的没搞过这样的东西
liuxzh1026 2010-02-23
  • 打赏
  • 举报
回复
呵呵,谢谢大伙的关注,谁能把我的问题解决了啊?
Jave.Lin 2010-02-23
  • 打赏
  • 举报
回复
是不是原汗原味啊。。。

学习一下。

希望别蒙我们喔!
yuzhangqu 2010-02-23
  • 打赏
  • 举报
回复
很现实的项目啊。
回复内容太短了!
gouhan02 2010-02-23
  • 打赏
  • 举报
回复
楼主,你的QQ密码给我改了,汗!本来试一下看看的,结果一改就改不回去了
现在是123abcabc.好像是(abc123123)你自己试试看吧。
mars199 2010-02-23
  • 打赏
  • 举报
回复
顶下,看不到。。。
这东西自己玩玩就好了
bourbon1795 2010-02-22
  • 打赏
  • 举报
回复
好久没看到这样的好帖了
再帮你顶下
bourbon1795 2010-02-22
  • 打赏
  • 举报
回复
做好了 来看看
靠 说我回复太短
Valefish 2010-02-22
  • 打赏
  • 举报
回复
留个脚印 方便关注..
nixiang12 2010-02-22
  • 打赏
  • 举报
回复
留个脚印 方便关注..
UP
starj1 2010-02-22
  • 打赏
  • 举报
回复
研究是好事,热卖就可能找麻烦了...
加载更多回复(2)

111,112

社区成员

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

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

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