找回密码
 加入
搜索
查看: 18243|回复: 21

[网络通信] 【已解决】post登录aspx网站 需要一个sessionid 和 aspxauth(服务器返回),怎获取?

  [复制链接]
发表于 2013-4-28 16:47:25 | 显示全部楼层 |阅读模式
本帖最后由 nangua111111 于 2013-5-5 19:51 编辑

总结:删除原先提问的一部分内容找了一个网站http://www.51aspx.com/  用户名和密码: ggg111。
51aspx 和我要登陆的网站差不多。请高手帮忙,谢谢了。

回复 aspxauth是登陆后返回的cookies啊 登录怎么会用到
Global $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Option(0) = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; BOIE9;ZHCN)"
$oHTTP.SetTimeouts(30000, 30000, 30000, 30000)
 
Local $sUrl, $sBody, $sData, $aMatch, $t
 
Local $sUser = "ggg111";账号
Local $sPass = "ggg111"密码
 
$sUrl = "http://www.51aspx.com/Sso/Login?mode=dlg&returnUrl=http://www.51aspx.com/&t=" & Random()
$oHTTP.Open("GET", $sUrl, True);我猜因为是转向地址,所以要用true同步选项。
$oHTTP.Send()
$sBody = waitResponse();这里应该是一个判断代码。
$aMatch = StringRegExp($sBody, "&t=(\d+)", 3)
;这里是第一步结束,目的获取网页地址中登陆序号
If Not @error Then
        $sUrl = "http://www.51aspx.com/Home/Token?source=login&t=" & $aMatch[0];
        ConsoleWrite($sUrl & @CRLF)
        $oHTTP.Open("GET", $sUrl, True);再次联系,但不是很明白。
        $oHTTP.Send()
        $sBody = waitResponse()
 $sData = "login_name=" & $sUser & "&login_pwd=" & $sPass & "&login_token="
        
        $oHTTP.Open("POST", "http://www.51aspx.com/Sso/Login", True);post语句登陆
        $oHTTP.setRequestHeader("Referer", "http://www.51aspx.com/")
        $oHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        $oHTTP.Send($sData)
        $sBody = waitResponse()
        ConsoleWrite($sBody & @CRLF)
        If StringInStr($sBody, 'success":true') Then MsgBox(64, "", "登陆成功")
EndIf
 
Func waitResponse($i_Time = -1, $b_Bin = False)
        Local $s_Header = ""
        
        If Not $oHTTP.WaitForResponse($i_Time) Then
                $oHTTP.Abort()
                Return SetError(1, 0, "")
        EndIf
        If $b_Bin Then Return $oHTTP.responseBody
        
        $s_Header = $oHTTP.GetResponseHeader("Content-Type")
        
        If StringInStr($s_Header, "gb2312") Or StringInStr($s_Header, "gbk") Then
                Return BinaryToString($oHTTP.responseBody, 1)
        Else
                Return BinaryToString($oHTTP.responseBody, 4)
        EndIf
EndFunc
以上是komaau3写的代码(是一个忽视验证码登录方式,你多登录退出几次就会出来验证码)。我这里也是总结一下自己,可能对大家有点用

下面的函数_WinHTTP_GetRespond我刚开始也用这个,结果怎么也不行,( 缺乏同步异步方式应该是这个函数最主要原因)简单的网页可以用_WinHTTP_GetRespond函数,

;函数用法.........: _WinHTTP_GetRespond($hRequest, $ConnectURL [, Mode[,$hTimeOut[,$Context[,$Cookies[,$MoreHeader[,$ProxyServer[, $FuncName[, $ParamArray]]]]]]]])

本帖子中包含更多资源

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

×
发表于 2013-4-29 17:07:37 | 显示全部楼层
回复 14# nangua111111

Global $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Option(0) = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; BOIE9;ZHCN)"
$oHTTP.SetTimeouts(30000, 30000, 30000, 30000)

Local $sUrl, $sBody, $sData, $aMatch, $t

Local $sUser = "ggg111"
Local $sPass = "ggg111"

$sUrl = "http://www.51aspx.com/Sso/Login?mode=dlg&returnUrl=http://www.51aspx.com/&t=" & Random()

$oHTTP.Open("GET", $sUrl, True)
$oHTTP.Send()
$sBody = waitResponse()
$aMatch = StringRegExp($sBody, "&t=(\d+)", 3)
If Not @error Then
        $sUrl = "http://www.51aspx.com/Home/Token?source=login&t=" & $aMatch[0]
        ConsoleWrite($sUrl & @CRLF)
        $oHTTP.Open("GET", $sUrl, True)
        $oHTTP.Send()
        $sBody = waitResponse()
        
        $sData = "login_name=" & $sUser & "&login_pwd=" & $sPass & "&login_token="
        
        $oHTTP.Open("POST", "http://www.51aspx.com/Sso/Login", True)
        $oHTTP.setRequestHeader("Referer", "http://www.51aspx.com/")
        $oHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        $oHTTP.Send($sData)
        $sBody = waitResponse()
        ConsoleWrite($sBody & @CRLF)
        If StringInStr($sBody, 'success":true') Then MsgBox(64, "", "登陆成功")
EndIf

Func waitResponse($i_Time = -1, $b_Bin = False)
        Local $s_Header = ""
        
        If Not $oHTTP.WaitForResponse($i_Time) Then
                $oHTTP.Abort()
                Return SetError(1, 0, "")
        EndIf
        If $b_Bin Then Return $oHTTP.responseBody
        
        $s_Header = $oHTTP.GetResponseHeader("Content-Type")
        
        If StringInStr($s_Header, "gb2312") Or StringInStr($s_Header, "gbk") Then
                Return BinaryToString($oHTTP.responseBody, 1)
        Else
                Return BinaryToString($oHTTP.responseBody, 4)
        EndIf
EndFunc

评分

参与人数 1金钱 +10 收起 理由
nangua111111 + 10

查看全部评分

发表于 2013-4-28 16:58:55 | 显示全部楼层
什么也看不清,得给网站地址看看
发表于 2013-4-28 16:58:57 | 显示全部楼层
什么也看不清,得给网站地址看看
 楼主| 发表于 2013-4-28 18:00:18 | 显示全部楼层
回复 3# ybb03
内网地址啊。,已经完善了一下 提交数据内容
发表于 2013-4-28 18:25:37 | 显示全部楼层
看post的内容和我研究的可能是一个类型的,EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTE2MzIzNDI5MzdkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQxja1NjcmVlbk1vZGVB2NU2eiwwIrSCJdL6oLxbe0Lslw%3D%3D&Login1%24UserName=kkkk&Login1%24Password=kkkk&Login1%24LoginButton=%E7%99%BB%E5%BD%95
是一直变的,他的获取在那个post的以后返回的网页数据里面可以找个,你下次post时用上依次这样处理
发表于 2013-4-28 19:12:44 | 显示全部楼层
SessionId啥时返回的?请求对应地址获取下不就行了
 楼主| 发表于 2013-4-28 20:03:46 | 显示全部楼层
本帖最后由 nangua111111 于 2013-4-28 20:13 编辑

回复 6# komaau3
用get 语句可以获取登录页面,就是后面的aspxauth不能获取,我单单用sessionid 这个cookie 去登录通不过

本帖子中包含更多资源

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

×
 楼主| 发表于 2013-4-28 20:06:01 | 显示全部楼层
看post的内容和我研究的可能是一个类型的,EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTE2MzIz ...
ybb03 发表于 2013-4-28 18:25


就是那个返回cookie 不知道 怎么去获取?能指导一下吗
 楼主| 发表于 2013-4-28 20:33:56 | 显示全部楼层
本帖最后由 nangua111111 于 2013-4-28 20:36 编辑

回复 5# ybb03
我用get语句单单获取这个
__VIEWSTATE=
指post 我试过了不行。
难道转向网页要设置其他项目?
发表于 2013-4-28 22:30:59 | 显示全部楼层
看下你post之前的网页内容即get到的网页,应该可以从中找到
发表于 2013-4-28 22:43:41 | 显示全部楼层
这是我get到的网页内容的一小部分__VIEWSTATE和__EVENTVALIDATION内容都是下次post要提交的内容
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJOTIzNzEyOTMzDxYEHgVzdGFydAUSMjAxMy00LTI2IDIwOjM3OjE0HgZCb29rSUQFAzQxNRYCAgEPZBYIAgIPFgIeCWlubmVyaHRtbAWQASog5rOo5oSP77ya54K55Ye74oCc5pu05paw5a2m5Lmg5pe26Ze04oCd5oyJ6ZKu55qE5pe26Ze06Ze06ZqU5Li677ya5aSn5LqOMTDliIbpkp/lsI/kuo4yMOWIhumSn++8jOS4jeWcqOatpOiMg+WbtOWImeS4jeiDvee0r+iuoeWtpuS5oOaXtumXtOOAgmQCCQ8PFgIeBFRleHQFAzI4OGRkAgsPFgIeB1Zpc2libGVnZAIMDxYCHwRoZGQIW2EZ2zmW2tmErWfBMfMva8ZH6w==" />
</div>

<div>

        <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWCAKUrZmuDgKXzJuDAwLehLisDgKz8dy8BQKu+OnrDgKE6rWYAwKzmc2yBwKR9JYatEJzCqGMvM/eZLNbHU3JSVXb5Ns=" />
</div>
发表于 2013-4-29 00:30:07 | 显示全部楼层
回复 7# nangua111111

aspxauth是登陆后返回的cookies啊 登录怎么会用到
 楼主| 发表于 2013-4-29 01:05:32 | 显示全部楼层
本帖最后由 nangua111111 于 2013-4-29 09:42 编辑

回复 12# komaau3


    asp网页有特殊性, 我估计是我不懂原理。
 楼主| 发表于 2013-4-29 09:45:54 | 显示全部楼层
本帖最后由 nangua111111 于 2013-4-29 10:06 编辑

找了一个网站http://www.51aspx.com/  用户名和密码: ggg111。
51aspx 和我要登陆的网站差不多。请高手帮忙,谢谢了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-1 07:42 , Processed in 0.092225 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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