找回密码
 加入
搜索
楼主: qq123123

[IE类操作] POST提交【数据】的问题!正在改源代码(已解决)

 火.. [复制链接]
发表于 2010-10-22 21:08:08 | 显示全部楼层
回复 14# qq123123
要真的是有密钥,不知道生成规则就无解了
 楼主| 发表于 2010-10-23 21:24:39 | 显示全部楼层
回复 3# pusofalse


    第3天继续等待!继续关注!
发表于 2010-10-23 21:31:22 | 显示全部楼层
回复 1# qq123123

P版对错误字很反感的!   
发表于 2010-10-24 03:12:00 | 显示全部楼层
支持下,看来楼主也是au3爱好者!
 楼主| 发表于 2010-10-25 06:09:54 | 显示全部楼层
第4天继续关注
发表于 2010-10-25 08:17:19 | 显示全部楼层
测试一下:

LZ没对另有一个帖子作出回复,所以这个正常的话给源码,不正常就算了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2010-10-25 20:45:17 | 显示全部楼层
回复 21# republican


脚本测试正常,请发源代码!谢谢!
发表于 2010-10-25 22:49:07 | 显示全部楼层
回复 22# qq123123
#include <WinHttp_GetRespond.au3>
#include <array.au3>
$MyOpen=_WinHttpOpen()        

$TelNumber = InputBox("请输入用户名","请输入用户名")
$rContext=_WinHTTP_GetRespond($MyOpen,"http://mail.10086.cn/Register/default.aspx",0,2)
$ViewValue=StringRegExp(BinaryToString($rContext[0]),'<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />',3)
If @error Then MsgBox(48,"Error","Error")
$Cookies=StringRegExpReplace($rContext[3],"(.+); path=/.*","$1")
$ViewValue=$ViewValue[0]
$context="__EVENTTARGET=subSendMsm&__EVENTARGUMENT=&__VIEWSTATE="&AnsiURLEncode($ViewValue)&"&txtUserNumber="&$TelNumber&"&hdSource=&hdInviteUid=0&hdInviteSeqno=&hdInviteType=&hdInviteGroup="
$rContext=_WinHTTP_GetRespond($MyOpen,"http://mail.10086.cn/Register/default.aspx",1,2,10000,1,$context,$Cookies,"Content-Type: application/x-www-form-urlencoded")
Switch $rContext[1]
        Case 302
                MsgBox(64,"Congratulation!","用户: "&$TelNumber&" 未被注册~")
        Case Else
                MsgBox(48,"I'm Sorry~","用户: "&$TelNumber&" 已经被注册!")
EndSwitch

_WinHttpCloseHandle($MyOpen)

Func AnsiURLEncode($str, $falg = 0)
        ;转换字符串为ANSI(GB2312)URL编码By afan
        ;可选参数$falg = 0,不转换字母及数字(默认);$falg = 1,全部转换(字符头http://除外)
        Local $str_s = StringRegExpReplace($str, '^(http://).+', '$1')
        If @extended = 0 Then $str_s = ''
        If @extended > 0 Then $str = StringRegExpReplace($str, '^http://', '')
        Local $astr, $i, $s2d, $sS = StringSplit($str, '')
        For $i = 1 To UBound($sS) - 1
                If StringRegExp($sS[$i], '[^\x00-\xff]') Then
                        $s2d = StringToBinary($sS[$i] & ' ')
                        $astr &= '%' & StringMid($s2d, 3, 2) & '%' & StringMid($s2d, 5, 2)
                ElseIf StringRegExp($sS[$i], '[^\w]') Then
                        $s2d = StringToBinary($sS[$i])
                        $astr &= '%' & StringMid($s2d, 3, 2)
                Else
                        If $falg = 0 Then $astr &= $sS[$i]
                        If $falg <> 0 Then
                                $s2d = StringToBinary($sS[$i])
                                $astr &= '%' & StringMid($s2d, 3, 2)
                        EndIf
                EndIf
        Next
        $astr = StringReplace($astr, '%20', '+') ;转换空格的编码为'+'号,也可不要此行
        Return $str_s & $astr
EndFunc   ;==>AnsiURLEncode
 楼主| 发表于 2010-10-25 23:13:02 | 显示全部楼层
回复 23# republican


    _WinHTTP_GetRespond.au3

这个函数,到底怎么处理,我搜索了BBS有介绍,但是我怎么放,都不正确,

请教!
发表于 2010-10-25 23:15:00 | 显示全部楼层
_WinHTTP_GetRespond.au3
winhttp.au3
winhttp_constatn.au3
都放在include或者同级目录即可。
发表于 2010-10-28 16:38:53 | 显示全部楼层
我来整个简单的 一看就会
$oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") 

$txtUserNumber = "13727004206"
$oHTTP = ObjCreate("Microsoft.xmlhttp")
$oHTTP.Open("POST", "https://mail.10086.cn/Register/Default.aspx", False)
$oHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oHTTP.Send("__EVENTTARGET=subSendMsm&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTExMjE0NzQ2NjMPFgIeCGNsaWVudGlkAusHFgICAQ9kFgRmDxYCHgdWaXNpYmxlaGQCCg8WAh8BaGRk&txtUserNumber=" & $txtUserNumber & "&hdSource=&hdInviteUid=0&hdInviteSeqno=&hdInviteType=&hdInviteGroup=");post关键数据
$oText = $oHTTP.responsetext

Select
        Case StringInStr($oText, '您已是139邮箱用户') <> 0;已经注册过
                MsgBox(0, "", "您已是139邮箱用户")
                
        Case StringInStr($oText, '短信验证码将下发到您的手机,请注意查收。收取短信验证码是免费的') <> 0;可以注册
                MsgBox(0, "", "短信验证码将下发到您的手机" & $txtUserNumber)
                
        Case $oText = "";返回为空,可以处理为超时了。也有可能是提交的数据有误导致返回为空
                MsgBox(0, "", "超时错误")
                
                
        Case Else;其他错误 日志保存在Log.txt,看返回的是什么在加判断
                FileWrite('Log.txt', $oText)
                MsgBox(0, "", "出现未知错误")
                
EndSelect


Func MyErrFunc()
;可以什么都不做,目的为了防止忘了超时导致程序崩溃。
EndFunc   ;==>MyErrFunc

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

发表于 2012-7-17 14:49:59 | 显示全部楼层
我最近也在学习Post 啊。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 03:34 , Processed in 0.086762 second(s), 18 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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