aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 89035|回复: 53

【 POST/GET教程】登录QQ空间发表日志&POST上传相册图片

 火... [复制链接]

52

主题

1270

回帖

7276

积分

荣誉会员

积分
7276
发表于 2011-11-3 23:34:58 | 显示全部楼层 |阅读模式
本简易教程,不讲解抓包知识及一些比较理论性的知识,不懂的请自行百度学习;
该教程主要讲述aardio的http库的POST及GET操作方面涉及的函数用法,及分析过程,按步骤贴出相关代码(不是完整程序代码);目的让你们在理解学习的知识基础上,自己动手写一个满足自己需求的完整程序出来。而不是简单的COPY!

后台提交需要分析数据及不断调试,比较耗费时间及精力,一般建议还请采用模拟操作,方便快捷。

一. 基础知识

1.1 编码知识


  • URL 编码
       在互联网上传送数据时,只能采用ASCII字符集。但由于数据常常包含ASCII字符集以外的字符(如中文)
       所以我们必须对数据转换为有效的ASCII字符格式,也就是URL编码。

在aardio里,转换URL编码的函数库就是inet.url
inet.url.decode("需解码的字符串") —— 调用unEscape函数
inet.url.encode("需编码的字符串") —— 完全URL编码,此函数将所有非字母非数字字符进行URL编码

示例:
import inet.url

var url = "https://svn.aardio.com/svn/aardio/Tools/%e4%b8%80%e9%b9%a4%e8%ae%ba%e5%9d%9b%e8%be%85%e5%8a%a9%e5%b7%a5%e5%85%b7/"
var str = inet.url.decode(url)// 解码

str=string.fromto(str)
// 加上这句把UTF8转为ASCII码就可正常显示

import console
console.log(str)

//显示 https://svn.aardio.com/svn/aardio/Tools/Jacen论坛辅助工具/


  • 内码转换
       涉及的网页编码常用有:gb2312(936)、big5(950)、 utf-8(65001)   POST数据是以utf-8 形式
       936代表是简体中文gb2312 ,而950代表繁体中文,65001就是我们说的 UTF-8编码了.
       POST/GET操作时,必须要了解网页的编码,根据实际需要进行编码转换,否则你会看到乱码的字符或提交不成功。

在aardio里,默认的核心string库就有转换函数。
string.fromto(”需转换的字符串“,需转换的编码,目标转换编码) —— 不填写编码参数, 默认将utf-8转为gb2312

//string.fromto 函数原型
functiong(s,cp=65001,tocp=0){
   
if(!s){return};
    s=string.toUtf16(s,cp);
    renurn s&string.fromUtf16(s,tocp);
}
str = string.fromto(str,fromcp=65001,tocp=0)

该函数首先将fromcp编码的字符转换为unicode编码,再从unicode编码转换为tocp编码。
在任何两种codepage(包括UTF8)之间转换编码都应当先转换为unicdoe编码
顺序为: codepage1-->unicode->codepage2

示例:
var str_utf8 = "E铏庡崱閫氬浘鍍?"//utf-8
var strTogb = string.fromto(str_utf8)//默认utf8转换为gb2312

var str_gb = "E虎卡通图?"//gb2312
var strToutf8 = string.fromto(str_gb,936,65001)//把gb2312转换为utf-8

import console;
//打开控制台
console.log(strTogb,strToutf8);


  • JSON转换
       有些网站提交后,返回的内容是JSON编码,此时会根据需要提取内容进行下一步的操作。

在aardio里,由web.json库提供json字符串的解码和编码,所谓解码就是把json字符串转换成aardio里的table,所以取值的话按table的方法即可;而编码则是把aardio里的table序列化成json字串。

web.json.parse(“json数据”) —— json字符串转换为table
web.json.stringify(“table对象”) —— 转换为json字符串


1.2 HTTP 头知识
POST/GET操作,需 对HTTP协议有一定了解, 详细的知识可以百度学习,这里只是简单列举一些相关的HTTP头知识;
透过抓包,可以看到下面的数据:


  • 请求头内容
       Accept:客户机支持的数据类型
       Accept-Charset: 客户机采用的编码
       Accept-Encoding: 客户机支持的数据压缩格式
       Accept-Language: 客户机的语言环境
       Host: 访问的主机名      
       Referer: 请求来自于哪个页面
       User-Agent: 浏览器相关信息
       Cookie:浏览器暂存服务器发送的信息
       Connection: 请求完后关闭或保持连接
       Date: 请求网站的时间



  • 响应头:
      Location: 控制浏览器显示哪个页面(通常是302跳转)
      Content-Encoding: 服务器发送的压缩编码方式
      Content-Length:服务器发送显示的字节码长度
      Content-Language: 服务器发送内容的语言和国家名
      Content-Type: 服务器发送内容的类型和编码类型      
      Content-Disposition: 服务器控制浏览器发下载方式打开文件      
      Set-Cookie:服务器发送Cookie相关的信息
      Date: 响应网站的时间



  • HTTP常见状态代码
       200 (OK): 找到了该资源,并且一切正常。
       302(Found): 重定向,发现新的连接请求信息
       304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
       401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
       403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
       404 (NOT FOUND): 在指定的位置不存在所申请的资源。


点评

真棒: 5.0
真棒: 5
真棒!  发表于 2011-11-4 08:29

评分

参与人数 19 +950 +971 收起 理由
nanyi0509 + 10 很给力!
oney + 10 赞一个!
aaucn + 60 很给力!
雨花 + 5
375773039 + 10 很给力!
夜的影子 + 20 赞一个!
瓜头酱油 + 6 淡定
hgbuser + 20
毛毛虫 + 90 非常好
星星 + 20 很给力!
namwonsta + 50 + 100
51ak + 100 赞一个!
lujjjh + 300
fantasynew + 90 很给力!
xauto + 50 很给力!
游戏 + 90 精品
低调点 + 100 + 200
nvt303 + 90 赞一个!
JacenHe + 500 写的很棒,非常感谢

查看全部评分

52

主题

1270

回帖

7276

积分

荣誉会员

积分
7276
 楼主| 发表于 2011-11-3 23:35:00 | 显示全部楼层
本帖最后由 qqmmcc 于 2011-11-4 12:37 编辑

二. 登录QQ空间(GET)

2.1 分析
透过抓包分析可以发现,登录QQ是采用GET方式,而且分为两步:
第一步:输入QQ号获取验证码
  1. http://ptlogin2.qq.com/check?uin=QQ号&appid=15000101&ptlang=2052&r=0.8782269803101405
复制代码

第一步 GET 提交后,服务器会有两种情况返回

ptui_checkVC('0','!5F8'); // 此信息不需要手动输入验证码

//此信息需要再次提交获取图片验证码手动输入
ptui_checkVC('1','6c052b276914a067a775de1cde3d4f995ecce1a2c0258f88');
“6c052b276914a067a775de1cde3d4f995ecce1a2c0258f88” 需要此key提交获取验证码,以保证验证码不失效

根据此特点编写获取验证码函数
verifycode = function(){
   
var url = "http://ptlogin2.qq.com/check?
uin="
+qq+"&appid=15000101&ptlang=2052&r="+math.random()
   
var refter = "http://qzone.qq.com/"
   
var temp = http.get(url,,refter)
    wb.write(temp)
   
if(temp){temp1 = string.match(temp,"\'(.*?)\'")}
    win.delay(100)
   
if(temp1=0){winform.code.text=string.match(temp,"\,\'(.*?)\'")  }
   
if(temp1=1){temp2 = string.match(temp,"\,\'(.*?)\'")}
   
if(temp2){  
        
var url = "http://captcha.qq.com/getimage?aid=15000101&r="+ math.random() +"&uin="+ qq +"&vc_type="+ temp2 +""
        winform.picturebox.image = http.get(url)
    }
}


第二步:输入密码及验证码,然后登录
  1. http://ptlogin2.qq.com/login?ptlang=2052&u=QQ号&p=MD5加密的密码&verifycode=!5D8&aid=15000101&u1=http%3A%2F%2Fimgcache.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&ptredirect=1&h=1&from_ui=1&dumy=&fp=loginerroralert&action=3-16-58672&dummy=
复制代码

登录的最重要一步,就是MD5加密的密码,透过JS 可以看到此加密的密码算法是:

  1. if (D[B].name == "p") {
  2.        var E = D.verifycode.value;//验证码
  3.        E = E.toUpperCase();//字符转大写
  4.        A += md5(md5_3(D.p.value) + E)
  5. }
复制代码

用aardio代码写出此JS的加密算法:
import string.md5;

md5_3 =
function(str){
   
var a,b,c = string.md5(str)
   
var a,b,c = string.md5(c)
   
var a,b,c = string.md5(c)
   
return a;      
}

var qqPass = string.md5(md5_3(password)+string.upper(verifycode))



2.2 登录代码
import win.ui;
/*DSG{{*/
var winform = win.form( text="aardio Form";right=658;bottom=601 )
winform.add(
button2={ bottom=402;right=127;left=31;top=364;font=LOGFONT( name=
'宋体' );z=9;text="跳转";cls="button" };
groupbox4={ bottom=202;right=146;left=10;top=144;z=2;text=
"输入验证码";edge=1;cls="groupbox" };
code={ bottom=192;text=
"";left=20;top=163;font=LOGFONT( name='宋体' );z=11;right=124;edge=1;cls="edit" };
qqpass={ bottom=120;text=
"";left=27;top=91;font=LOGFONT( name='宋体' );z=6;right=127;password=1;edge=1;cls="edit" };
qqnum={ bottom=60;text=
"";left=27;top=34;font=LOGFONT( name='宋体' );z=5;right=131;edge=1;cls="edit" };
login={ bottom=349;right=125;left=29;top=311;font=LOGFONT( name=
'宋体' );z=7;text="登录";cls="button" };
groupbox2={ bottom=70;right=147;left=11;top=18;z=4;text=
"QQ号";edge=1;cls="groupbox" };
edit3={ vscroll=1;text=
"";left=157;multiline=1;top=21;font=LOGFONT( name='宋体' );bottom=401;z=8;right=638;hscroll=1;edge=1;cls="edit" };
picturebox={ bottom=287;notify=1;right=138;left=18;top=231;font=LOGFONT( name=
'宋体' );transparent=1;border=1;z=10;text="picturebox";cls="picturebox" };
groupbox={ bottom=300;right=150;left=7;top=212;z=3;text=
"点击图片获取验证码";edge=1;cls="groupbox" };
groupbox3={ bottom=131;right=148;left=10;top=75;z=1;text=
"QQ密码";edge=1;cls="groupbox" }
)
/*}}*/

import web.form;
var wb = web.form( winform.edit3);//创建web窗体

math.randomize()

import string.md5;
md5_3 =
function(str){
var a,b,c = string.md5(str)
var a,b,c = string.md5(c)
var a,b,c = string.md5(c)
return a;      
}

import inet.http;
http = inet.http();
//创建http对象


//获取验证码函数
verifycode = function(){
   
var url = "http://ptlogin2.qq.com/check?
uin="
+qq+"&appid=15000101&ptlang=2052&r="+math.random()
   
var refter = "http://qzone.qq.com/"
   
var temp = http.get(url,,refter)
    wb.write(temp)
   
if(temp){temp1 = string.match(temp,"\'(.*?)\'")}
    win.delay(100)
   
if(temp1=0){winform.code.text=string.match(temp,"\,\'(.*?)\'")  }
   
if(temp1=1){temp2 = string.match(temp,"\,\'(.*?)\'")}
   
if(temp2){  
        
var url = "http://captcha.qq.com/getimage?aid=15000101&r="+ math.random() +"&uin="+ qq +"&vc_type="+ temp2 +""
        winform.picturebox.image = http.get(url)
    }
}

//获取输入的QQ号
winform.qqnum.oncommand = function(id,event){   
    qq= winform.qqnum.text  
}


//获取验证码图片
winform.picturebox.oncommand = function(id,event){
    inet.clearCache(
"qq.com")
   
if(!qq){
        winform.msgbox(
"请输入QQ号")
    }
else {
        verifycode()
    }
        
}

//登录
winform.login.oncommand = function(id,event){
   
var password = winform.qqpass.text  
   
var code = string.upper(winform.code.text);
   
var jiami = string.md5(md5_3(password)+code)
   
var html = http.get("http://ptlogin2.qq.com/login?ptlang=2052&u="+ qq +"&p="+ jiami +"&verifycode="+ code +"&aid=15000101&u1=http%3A%2F%2Fimgcache.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&ptredirect=1&h=1&from_ui=1&dumy=&fp=loginerroralert")
   
if(html){
        wb.write(string.fromto( html ))
    }
   
if(string.find(string.fromto( html ),"登录成功")){
        wb.go(
"http://qzone.qq.com")
    }
else {
        winform.msgbox(
"登录失败")
    }
   
}


//跳转
winform.button2.oncommand = function(id,event){
    wb.go(
"http://my.qq.com/")
   
}


winform.show(
true)

//进入消息循环
win.loopMessage();
return winform,wb;

2011-11-01 19 52 17.png



52

主题

1270

回帖

7276

积分

荣誉会员

积分
7276
 楼主| 发表于 2011-11-3 23:35:01 | 显示全部楼层
本帖最后由 qqmmcc 于 2011-11-2 00:07 编辑

三. POST 发表日志

3.1  分析
抓包分析,发表日志POST 提交的地址是
  1. http://b1.qzone.qq.com/cgi-bin/blognew/blog_add?g_tk=62860730
复制代码
重点是 g_tk 参数值计算,透过分析JS知道其算法
  1. QZBlog.Util.getToken = function() {

  2.     var skey = QZONE.cookie.get("skey");

  3.     var hash = 5381;

  4.     var len = skey.length;

  5.     for(var index=0; index<len; ++index) {

  6.         hash += (hash << 5) + skey.charCodeAt(index);

  7.     }

  8.     return hash & 0x7fffffff;

  9. };
复制代码

登陆成功后,会在登陆成功的cookie值中有一个skey的cookie,取该cookie的值,进行循环取单字符的二进制并取左值

知道JS的加密算法后,用aardio代码改写如下
import string.list;
//获取cookie的skey值
getSkey = function(){
   
var cookie = inet.getCookie("http://www.qq.com")
   
var cooklst = string.list(cookie,";")
   
return cooklst.skey;
}

//获取g_tk 的token值
getGtk = function(str){
   
var hash = 5381;
   
for(i=1; #str){
        hash += (hash << 5) + str[ i ];
    }
   
return hash & 0x7fffffff;
}


该g_tk值,登录后很多地方都要用来验证的。重点解决后,然后就是构造数据POST了
发送成功后服务器会返回以下数据
  1. <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body><script type="text/javascript">document.domain="qq.com";
  2. frameElement.callback(
  3. {"blogid":1318875100,
  4. "letter":0,
  5. "pp":0,
  6. "xmd":0,
  7. "tag":"",
  8. "tip":"发表成功! "
  9. }
  10. );
  11. </script></body></html>
复制代码

3.2 POST发表日志代码

import string.list;

//获取cookie的skey值
getSkey = function(){
   
var cookie = inet.getCookie("http://www.qq.com")
   
var cooklst = string.list(cookie,";")
   
return cooklst.skey;
}

//获取g_tk 的token值
getGtk = function(str){
   
var hash = 5381;
   
for(i=1; #str){
        hash += (hash << 5) + str[ i ];
    }
   
return hash & 0x7fffffff;
}


//获取当天日期
getDate = function(){
    tm = time();
    tm.format=
"%Y%m%d";
   
return tostring(tm);
}

//发送数据   
postData = function(gtk){
    lst = string.list( ,
"&")
   
namespace lst{
        uin=..qq;
        category=
"%B8%F6%C8%CB%C8%D5%BC%C7";//个人日记
        title=..inet.url.encode(winform.title.text);//标题
        content=..inet.url.encode(winform.content.text);//内容
        html="%3Cdiv+class%3D%22blog_details_"+..getDate()+"%22%3E"+content+"%3C%2Fdiv%3E";
        tweetflag=
"0";
        cb_autograph=
"1";
        topflag=
"0";
        needfeed=
"0";
        g_tk = gtk;
        _fp_refer=
"http%3A%2F%2Fctc.qzs.qq.com%2Fqzone%2Fnewblog%2Fv5%2Feditor.html%3Fsource%3D1%7Chttp%3A%2F%2Fctc.qzs.qq.com%2Fqzone%2Fnewblog%2Fv5%2Feditor.html%3Fsource%3D1%3Chttp%3A%2F%2Fuser.qzone.qq.com%2F"+uin   
    }   
   
return tostring(lst);
}


// 发表日志
winform.button3.oncommand = function(id,event){     
   
var skey = getSkey()
   
var gtk = getGtk(skey)
   
var data = postData(gtk)
   
var refter = "http://ctc.qzs.qq.com/qzone/v5/toolpages/fp_gbk.html"
   
var url = "http://b1.qzone.qq.com/cgi-bin/blognew/blog_add?g_tk=" +gtk
   
var header = "Content-Type: application/x-www-form-urlencoded"
    win.delay(100)
   
var html = http.post(url,data,header,refter)
   
if(html){
        str = string.match(html,
"callback\((.*?)\)")
        wb.write(str)
    }   
   
}

2011-11-02 00 03 07.png        2011-11-02 00 03 45.png


52

主题

1270

回帖

7276

积分

荣誉会员

积分
7276
 楼主| 发表于 2011-11-3 23:36:07 | 显示全部楼层
四. POST 上传图片至QQ空间相册
1.1 分析
抓包可以发现,POST上传文件的包数据,与普通的POST提交数据明显不同的地方就是

-----------------------------7d86d710144a(随机字符串
Content-Disposition: form-data; name="filename"; filelength="8922"; filename="haiou.jpg"
Content-Type: image/jpeg

?(抓包数据看到的乱码,其实是文件二进制流,在文本框只能看到“?”

-----------------------------7d86d710144a
Content-Disposition: form-data; name="albumid"(必须)

dc48aa07-11ad-40fd-8daa-a9a713a1b48f(name值)

...........(l略)

-----------------------------7d86d710144a-- 最后“--”告诉网站服务器,该文件上传结束

POST 提交地址:
  1. http://hzup.photo.qq.com/cgi-bin/upload/cgi_upload_pic?g_tk=1008073779&boundary=---------------------------7d86d710144a
复制代码
在aardio,构造POST上传数据的库是web.multipartFormData

formdata = web.multipartFormData()
formdata.add("字段名","字段值") //如果值的第一个字符为"@",则@后面应当是上传文件路径

在此例,由于是flash上传控件,只能抓包查找,
抓包数据显示提交的字段参数蛮多的,但不是全部必须要构造的,分析后,只有albumid是必须的,
经分析 "albumid"  是name "dc48aa07-11ad-40fd-8daa-a9a713a1b48f" 是值,是QQ空间的相册地址ID

//获取默认相册地址
getAlbum = function(){
   
var str = http.get("http://xalist.photo.qq.com/fcgi-bin/fcg_list_album?uin="+ qq + "&outstyle=2&t=%f")
   
var id = string.match(str,"_Callback\((.*)\)")
   
var tab = web.json.parse(id)
   
return tab.album[1].id;
}


4.2 上传图片至相册代码

//创建状态栏
import win.ui.statusbar;
var stat = win.ui.statusbar( winform );

// 接收文件拖放
winform.wndproc = function(hwnd,message,wParam,lParam){
   
select(message) {//判断消息类型
        case 0x233/*_WM_DROPFILES 文件放下消息*/{
            path = win.getDropFile(wParam )[1];
//获取拖放文件的路径及文件名
            stat.setText("准备上传文件 : "+path)
            
        }
    }
}

import web.multipartFormData;
import web.json;

//获取默认相册地址
getAlbum = function(){
   
var str = http.get("http://xalist.photo.qq.com/fcgi-bin/fcg_list_album?uin="+ qq + "&outstyle=2&t=%f")
   
var id = string.match(str,"_Callback\((.*)\)")
   
var tab = web.json.parse(id)
   
return tab.album[1].id;
}

//上传图片
winform.button4.oncommand = function(id,event){
   
var skey = getSkey()
   
var gtk = getGtk(skey)
   
var albumid = getAlbum()
   
var formdata = web.multipartFormData()
    formdata.add(
"albumid",albumid);
    formdata.add(
"filename","@" + path);  
   
   
var url = "http://hzup.photo.qq.com/cgi-bin/upload/cgi_upload_pic?g_tk="+ gtk +"&boundary="+formdata.boundary() +""
   
var referer = "http://ctc.qzs.qq.com/qzone/client/photo/swf/Upload.swf"
   
var html = http.post(url, formdata.readAll()
               , ..string.format(
'\r\nContent-Type: %s\r\n',multipartFormData.contentType() )
               ,referer);
    stat.setText(
"正在上传请稍候。。。")
   
if(string.find(html,"上传成功")){
        wb.go(
"http://user.qzone.qq.com/" +qq+"/photo/"+albumid+"/ ")
        stat.setText(
"上传成功")
    }
else {
        winform.msgbox(
"上传失败")
    }
    reset()
   
    import console
    console.log(html)
}

2011-11-03 23 12 06.png

评分

参与人数 2 +50 +150 收起 理由
quickerfans + 50 + 100 期待已久的教程,q版辛苦,谢谢
fyy + 50 赞一个!

查看全部评分

75

主题

767

回帖

5045

积分

六级会员

The only one

积分
5045
发表于 2011-11-4 00:14:52 来自手机 | 显示全部楼层
支持笔记教程!

5

主题

118

回帖

1483

积分

四级会员

积分
1483
发表于 2011-11-4 00:32:08 | 显示全部楼层
精品教程,非常不错。

0

主题

2

回帖

29

积分

新手入门

积分
29
发表于 2011-11-4 03:45:18 | 显示全部楼层
真是辛苦了 谢谢分享

7

主题

115

回帖

747

积分

三级会员

积分
747
QQ
发表于 2011-11-4 08:44:07 来自手机 | 显示全部楼层
谢谢分享,学习了

65

主题

880

回帖

5033

积分

荣誉会员

积分
5033
发表于 2011-11-4 08:45:05 | 显示全部楼层
{:soso__10740271207609421906_3:}

7

主题

115

回帖

747

积分

三级会员

积分
747
QQ
发表于 2011-11-4 08:45:36 来自手机 | 显示全部楼层
谢谢分享,学习了

9

主题

70

回帖

583

积分

三级会员

积分
583
发表于 2011-11-4 09:38:09 | 显示全部楼层
经典啊.非常详细的教程.谢谢楼主

117

主题

1103

回帖

6572

积分

六级会员

积分
6572
发表于 2011-11-4 09:51:12 | 显示全部楼层

点评

你才牛呢,跟你学习的,知道不  发表于 2011-11-4 15:49

6

主题

157

回帖

897

积分

荣誉会员

爱生活,爱拉芳。

积分
897
发表于 2011-11-4 10:01:24 | 显示全部楼层
firefox抓包.JPG
对于超版提到的查看那些脚本,一时不知道从哪儿查找。{:soso_e110:}

42

主题

628

回帖

3765

积分

版主

积分
3765
发表于 2011-11-4 11:35:18 | 显示全部楼层
用 Firefox
点Tools(工具)->add-ons(附加组件)
搜索firebug,安装,重启Firefox

用Firefox打开网页,按F12 启动Firebug
点Net(网络)->All(所有) 然后刷新页面。
可以看到抓包工具例出了所有Get,Post的详细信息。

找到你需要的Post条目,点前面的+号展开.点击Post信息标签
可以看到Post的所有参数(Parameters) 以及源代码(Source)
其中的Source就可以作为post的参数使用。

点评

同意: 5.0 真棒: 5.0
同意: 5 真棒: 5
这个不错,学到了  发表于 2011-11-22 22:01
推荐一些Firebug插件: Firebug Autocompleter(在控制台写js时支持自动完成),FireQuery,Dojo Firebug Extension  发表于 2011-11-4 11:39

0

主题

11

回帖

140

积分

一级会员

积分
140
发表于 2011-11-4 12:24:18 | 显示全部楼层
好好学习  天天向上
初学 收藏学习{:soso_e100:}

26

主题

76

回帖

649

积分

荣誉会员

积分
649
发表于 2011-11-5 08:48:15 | 显示全部楼层
非常不错的教程,收藏了

0

主题

7

回帖

50

积分

一级会员

积分
50
发表于 2011-11-6 12:50:02 | 显示全部楼层
超好教程,过几天学习下。。。

52

主题

1270

回帖

7276

积分

荣誉会员

积分
7276
 楼主| 发表于 2011-11-9 01:13:15 | 显示全部楼层
papapa314 发表于 2011-11-8 06:22
奇怪,为什么我输入我的qq账号密码,明明都是正确的,但就是提示登陆失败,ptuiCB('3','0','','0','您输入 ...

步骤:
1.先输入QQ号码 也可以选择输入密码
2.点击图片框获取验证码,如果图片框出现验证码图片,则需要手动输入验证码
3.最后一步才点击登录框

完成上面步骤后还出错,请打开浏览器手动登录一次,自己抓包研究实现!

0

主题

3

回帖

176

积分

一级会员

积分
176
发表于 2011-11-10 00:08:06 | 显示全部楼层
收获很大....
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-2-13 07:46 , Processed in 0.099902 second(s), 42 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表