• 1828阅读
  • 0回复

POST实战演练 第2课:百度个人中心POST上传头像讲解 [复制链接]

上一主题 下一主题
离线啊冲
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2016-08-29
.版本 2

.程序集 窗口程序集1
.程序集变量 Cookie, 文本型

.子程序 __启动窗口_创建完毕
.局部变量 Winhttp, 对象

Winhttp.创建 (“Winhttp.WinHttpRequest.5.1”, )
Winhttp.方法 (“Open”, “GET”, “http://passport.baidu.com/?verifypic”)
Winhttp.方法 (“Send”, )
图片框1.图片 = Winhttp.读属性 (“ResponseBody”, ).取字节集 ()

.子程序 _按钮1_被单击
.局部变量 Winhttp, 对象
.局部变量 返回文本, 文本型
.局部变量 提交数据, 文本型

Winhttp.创建 (“Winhttp.WinHttpRequest.5.1”, )
提交数据 = “tpl_ok=&next_target=&tpl=&skip_ok=&aid=&need_pay=&need_coin=&pay_method=&u=.%2F&return_method=get&more_param=&return_type=&psp_tt=0&password=” + 编辑框2.内容 + “&safeflg=0&isphone=false&username=” + 编辑框1.内容 + “&verifycode=” + 编辑框3.内容 + “&mem_pass=on”

Winhttp.方法 (“Open”, “POST”, “https://passport.baidu.com/?login”, 真)
Winhttp.方法 (“SetRequestHeader”, “Referer”, “http://passport.baidu.com/?login&tpl=mn”)
Winhttp.方法 (“SetRequestHeader”, “Content-Type”, “application/x-www-form-urlencoded”)
Winhttp.方法 (“Send”, 提交数据)
Winhttp.逻辑方法 (“WaitForResponse”, 5)  ' 以秒为单位的超时值
返回文本 = 到文本 (Winhttp.读属性 (“ResponseBody”, ).取字节集 ())


.如果 (寻找文本 (返回文本, “http://passport.baidu.com/”, , 假) > 0)
    信息框 (“登录成功”, 0, )
    返回文本 = Winhttp.文本方法 (“GetAllResponseHeaders”, )
    子程序_取特定COOKIE (返回文本)


.否则
    信息框 (“登录失败”, 0, )
    输出调试文本 (返回文本)
.如果结束


.子程序 子程序_取特定COOKIE
.参数 返回协议头, 文本型
.局部变量 临时_分割文本数组, 文本型, , "0"
.局部变量 a, 整数型
.局部变量 BAIDUID, 文本型
.局部变量 BDUSS, 文本型
.局部变量 PTOKEN, 文本型
.局部变量 STOKEN, 文本型
.局部变量 USERID, 文本型

临时_分割文本数组 = 分割文本 (返回协议头, #换行符, )
.计次循环首 (取数组成员数 (临时_分割文本数组), a)
    .如果真 (临时_分割文本数组 [a] ≈ “Set-Cookie: BAIDUID=”)
        BAIDUID = “BAIDUID=” + 高级截取文本 (临时_分割文本数组 [a], “Set-Cookie: BAIDUID=”, “;”) + “;”
    .如果真结束
    .如果真 (临时_分割文本数组 [a] ≈ “Set-Cookie: BDUSS=”)
        BDUSS = “BDUSS=” + 高级截取文本 (临时_分割文本数组 [a], “Set-Cookie: BDUSS=”, “;”) + “;”
    .如果真结束
    .如果真 (临时_分割文本数组 [a] ≈ “Set-Cookie: PTOKEN=”)
        .如果真 (取文本长度 (高级截取文本 (临时_分割文本数组 [a], “Set-Cookie: PTOKEN=”, “;”)) > 5)
            PTOKEN = “PTOKEN=” + 高级截取文本 (临时_分割文本数组 [a], “Set-Cookie: PTOKEN=”, “;”) + “;”
        .如果真结束

    .如果真结束
    .如果真 (临时_分割文本数组 [a] ≈ “Set-Cookie: STOKEN=”)
        STOKEN = “STOKEN=” + 高级截取文本 (临时_分割文本数组 [a], “Set-Cookie: STOKEN=”, “;”) + “;”
    .如果真结束
    .如果真 (临时_分割文本数组 [a] ≈ “Set-Cookie: USERID=”)
        USERID = “USERID=” + 高级截取文本 (临时_分割文本数组 [a], “Set-Cookie: USERID=”, “;”) + “;”
    .如果真结束

.计次循环尾 ()
Cookie = BAIDUID + BDUSS + PTOKEN + STOKEN + USERID
输出调试文本 (Cookie)

.子程序 高级截取文本, 文本型, , Cody by 被封七号
.参数 完整内容, 文本型
.参数 左边文本, 文本型
.参数 右边文本, 文本型
.参数 开始位置, 整数型, 可空, 可指定开始寻找的位置,为空则不指定
.参数 文本长度, 整数型, 参考 可空, 用一个变量来接收找到的文本长度
.参数 最大长度, 整数型, 可空, 指定返回的文本的最大长度。为空则返回全部
.参数 出现位置, 整数型, 参考 可空, 用一个变量来接收找到的位置
.参数 长度限制, 逻辑型, 可空, 是否只返回 长度不超过 最大长度 的文本,如果超出则返回空文本?
.局部变量 临时位置_左边, 整数型
.局部变量 临时位置_右边, 整数型
.局部变量 临时文本, 文本型

.如果 (是否为空 (开始位置))
    临时位置_左边 = 寻找文本 (完整内容, 左边文本, , 假)
.否则
    临时位置_左边 = 寻找文本 (完整内容, 左边文本, 开始位置, 假)
.如果结束
.如果真 (临时位置_左边 = -1)
    返回 (“”)
.如果真结束
临时位置_左边 = 临时位置_左边 + 取文本长度 (左边文本)
出现位置 = 临时位置_左边
临时位置_右边 = 寻找文本 (完整内容, 右边文本, 临时位置_左边, 假)
.如果真 (临时位置_右边 = -1 或 临时位置_左边 > 临时位置_右边)
    返回 (“”)
.如果真结束
文本长度 = 临时位置_右边 - 临时位置_左边
.如果真 (长度限制 且 文本长度 > 最大长度)
    返回 (“”)
.如果真结束
临时文本 = 取文本中间 (完整内容, 临时位置_左边, 文本长度)
.如果真 (是否为空 (最大长度) = 假)
    临时文本 = 取文本左边 (临时文本, 最大长度)
.如果真结束
返回 (临时文本)

.子程序 _按钮2_被单击
.局部变量 Winhttp, 对象
.局部变量 返回文本, 文本型
.局部变量 变体, 变体型
.局部变量 提交数据, 字节集

.如果真 (通用对话框1.打开 () = 假)
    信息框 (“请选择一个图片来上传”, 0, )
    返回 ()
.如果真结束

编辑框4.内容 = 通用对话框1.文件名
提交数据 = 子字节集替换 (到字节集 (#常量_POST数据包), 到字节集 (“[图片数据]”), 读入文件 (通用对话框1.文件名), , )


Winhttp.创建 (“Winhttp.WinHttpRequest.5.1”, )
Winhttp.方法 (“Open”, “GET”, “http://passport.baidu.com/portrait”, 真)
Winhttp.方法 (“SetRequestHeader”, “Referer”, “http://passport.baidu.com/center”)
Winhttp.方法 (“SetRequestHeader”, “Cookie”, Cookie)
Winhttp.方法 (“Send”, )
Winhttp.逻辑方法 (“WaitForResponse”, 5)  ' 以秒为单位的超时值
返回文本 = 到文本 (Winhttp.读属性 (“ResponseBody”, ).取字节集 ())
返回文本 = 高级截取文本 (返回文本, “Hiphoto.render(” + #引号, #引号)


Winhttp.方法 (“Open”, “POST”, “http://himg.baidu.com/sys/upload/” + 返回文本, 真)
Winhttp.方法 (“SetRequestHeader”, “Referer”, “http://passport.baidu.com/flash/imageEditPanel.swf”)
Winhttp.方法 (“SetRequestHeader”, “Content-Type”, “multipart/form-data; boundary=---------------------------pwwsyqixpfve”)
Winhttp.方法 (“SetRequestHeader”, “Cookie”, Cookie)
变体.赋值 (提交数据, )
Winhttp.方法 (“Send”, 变体)
Winhttp.逻辑方法 (“WaitForResponse”, 5)  ' 以秒为单位的超时值
返回文本 = 到文本 (Winhttp.读属性 (“ResponseBody”, ).取字节集 ())
.如果 (寻找文本 (返回文本, #常量成功, , 假) > 0)
    信息框 (“上传成功!”, 0, )
.否则
    信息框 (“上传失败!”, 0, )
    输出调试文本 (返回文本)
.如果结束

善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个