找回密码  加入

QQ登录

只需一步,快速开始

AUTOIT CN

搜索
查看: 3925|回复: 16

[求购] 30RBM求一个能获取完整cookies的方法

[复制链接]
发表于 2016-9-29 16:43:25 | 显示全部楼层 |阅读模式
1金钱
一句话描述:用ie登录阿里妈妈网站后通过ie对象获取完整cookies来被winhttp使用

困难:网站无法post登录,必须模拟,cookies包含httponly

请大牛指教一下 ,难度大的我加

示例代码如下:

  1. #include <IE.au3>
  2. #include <EditConstants.au3>
  3. #include <GUIConstantsEx.au3>
  4. #include <WindowsConstants.au3>
  5. $Form1 = GUICreate("Form1", 623, 600, 192, 114)
  6. $ieobj = _IECreateEmbedded()
  7. GUICtrlCreateObj($ieobj, 0, 0, 617, 393)
  8. _IENavigate($ieobj, "https://login.taobao.com/member/login.jhtml?style=mini&from=alimama")
  9. $Edit1 = GUICtrlCreateEdit("", 0, 400, 617, 140, $WS_VSCROLL)
  10. $button = GUICtrlCreateButton("提交", 270, 560, 80, 30)
  11. GUISetState(@SW_SHOW)

  12. While 1
  13.         $nMsg = GUIGetMsg()
  14.         Switch $nMsg
  15.                 Case $GUI_EVENT_CLOSE
  16.                         Exit
  17.                 Case $button
  18.                         getjson()
  19.         EndSwitch
  20.         $cookies = _IEDocGetObj($ieobj).cookie
  21.         If GUICtrlRead($Edit1) <> $cookies Then GUICtrlSetData($Edit1, $cookies)
  22. WEnd
  23. Func getjson()
  24.         $url = "http://pub.alimama.com/pubauc/getCommonCampaignByItemId.json?itemId=528423266110"
  25.         $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
  26.         $oHTTP.Open("get", $url, False)
  27.         $oHTTP.setRequestHeader("Cookie", $cookies)
  28.         $oHTTP.Send()
  29.         $dxjson = $oHTTP.responsebody
  30.         MsgBox(0,0,BinaryToString($dxjson, 4))
  31. EndFunc   ;==>getjson
复制代码

 楼主| 发表于 2016-9-29 20:38:47 | 显示全部楼层
用InternetGetCookieEx 应该可以实现,
应为对dllcall完全不懂,临时突击了一下

  1. $url = _IEPropertyGet($ieobj ,"locationurl")
  2. $dllsize = "1024"
  3. $getcookies = DllCall("wininet.dll" ,"wstr" ,"InternetGetCookieEx" ,"wstr" ,$url ,"PTR" ,"NULL" ,"wstr" "" ,"DWORD" ,$dllsize ,"DWORD" ,"INTERNET_COOKIE_HTTPONLY" ,"PTR" ,"NULL")
  4. _ArrayDisplay($getcookies)
复制代码

然后还是获取不到

  1. BOOL InternetGetCookieEx(
  2.   _In_        LPCTSTR lpszURL,
  3.   _In_        LPCTSTR lpszCookieName,
  4.   _Inout_opt_ LPTSTR  lpszCookieData,
  5.   _Inout_     LPDWORD lpdwSize,
  6.   _In_        DWORD   dwFlags,
  7.   _In_        LPVOID  lpReserved
  8. );
复制代码
回复

使用道具 举报

发表于 2016-9-29 21:00:25 | 显示全部楼层
按部就班一步一步post呗
回复

使用道具 举报

 楼主| 发表于 2016-9-29 21:50:34 | 显示全部楼层
回复 3# haijie1223


    阿里系的网站要能post成功  简直是比登天还难
回复

使用道具 举报

发表于 2016-9-29 21:57:17 | 显示全部楼层
回复 4# cxlater


    对Cookies不太明白,不过那个api应该是这么写:
  1. #include <ARRAY.AU3>
  2. #include <WinAPI.au3>
  3. Global $INTERNET_COOKIE_HTTPONLY = 8192 ;Requires IE 8 or higher
  4. Global $INTERNET_COOKIE_THIRD_PARTY = 131072
  5. Global $INTERNET_FLAG_RESTRICTED_ZONE = 16
  6. Global $sUrl = '你的网址'
  7. Global $sCookieName = '网站的cookies名称'
  8. Global $tSize = DllStructCreate("dword[10000]")
  9. Global $tBuffer = DllStructCreate('char[10000]')
  10. Global $getcookies = DllCall("wininet.dll", _
  11.                 "bool", "InternetGetCookieExW", _
  12.                 'wstr', $sUrl, _
  13.                 'wstr', $sCookieName, _
  14.                 "ptr", DllStructGetPtr($tBuffer), _
  15.                 "ptr", DllStructGetPtr($tSize), _
  16.                 "dword", $INTERNET_COOKIE_HTTPONLY, _
  17.                 "ptr", Null _
  18.                 )
  19. If Not _WinAPI_GetLastError() Then ConsoleWrite(DllStructGetData($tBuffer, 1) & @CRLF)
  20. ConsoleWrite(_WinAPI_GetLastError() & @CRLF)
  21. _ArrayDisplay($getcookies)
复制代码
回复

使用道具 举报

发表于 2016-9-30 10:02:22 | 显示全部楼层
好像有另外一个API函数,忘了什么了
回复

使用道具 举报

 楼主| 发表于 2016-9-30 10:18:39 | 显示全部楼层
还是,淘宝的登录页面,有一个cookie2的cookie字段, 只要能获取到他就ok了

完整可重现代码:

  1. #include <IE.au3>
  2. #include <EditConstants.au3>
  3. #include <GUIConstantsEx.au3>
  4. #include <WindowsConstants.au3>
  5. #include <ARRAY.AU3>
  6. #include <WinAPI.au3>
  7. $Form1 = GUICreate("Form1", 623, 600, 192, 114)
  8. $ieobj = _IECreateEmbedded()
  9. GUICtrlCreateObj($ieobj, 0, 0, 617, 393)
  10. _IENavigate($ieobj, "https://login.taobao.com/member/login.jhtml?style=mini&from=alimama")
  11. $Edit1 = GUICtrlCreateEdit("", 0, 400, 617, 140, $WS_VSCROLL)
  12. $button = GUICtrlCreateButton("提交", 270, 560, 80, 30)
  13. GUISetState(@SW_SHOW)

  14. While 1
  15.         $nMsg = GUIGetMsg()
  16.         Switch $nMsg
  17.                 Case $GUI_EVENT_CLOSE
  18.                         Exit
  19.                 Case $button
  20.                         getjson()
  21.         EndSwitch
  22.         $cookies = _IEDocGetObj($ieobj).cookie
  23.         If GUICtrlRead($Edit1) <> $cookies Then GUICtrlSetData($Edit1, $cookies)
  24. WEnd
  25. Func getjson()
  26.         Global $INTERNET_COOKIE_HTTPONLY = 8192 ;Requires IE 8 or higher
  27.         Global $INTERNET_COOKIE_THIRD_PARTY = 131072
  28.         Global $INTERNET_FLAG_RESTRICTED_ZONE = 16
  29.         Global $sUrl = _IEPropertyGet($ieobj ,"locationurl")
  30.         Global $sCookieName = 'cookie2'
  31.         Global $tSize = DllStructCreate("dword[10000]")
  32.         Global $tBuffer = DllStructCreate('char[10000]')
  33.         Global $getcookies = DllCall("wininet.dll", _
  34.                         "bool", "InternetGetCookieExW", _
  35.                         'wstr', $sUrl, _
  36.                         'wstr', $sCookieName, _
  37.                         "ptr", DllStructGetPtr($tBuffer), _
  38.                         "ptr", DllStructGetPtr($tSize), _
  39.                         "dword", $INTERNET_COOKIE_HTTPONLY, _
  40.                         "ptr", Null _
  41.                         )
  42.         If Not _WinAPI_GetLastError() Then ConsoleWrite(DllStructGetData($tBuffer, 1) & @CRLF)
  43.         ConsoleWrite(_WinAPI_GetLastError() & @CRLF)
  44.         _ArrayDisplay($getcookies)
  45. ;~        
  46. ;~         $url = "http://pub.alimama.com/pubauc/getCommonCampaignByItemId.json?itemId=528423266110"
  47. ;~         $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
  48. ;~         $oHTTP.Open("get", $url, False)
  49. ;~         $oHTTP.setRequestHeader("Cookie", ClipGet())
  50. ;~         $oHTTP.Send()
  51. ;~         $dxjson = $oHTTP.responsebody
  52. ;~         MsgBox(0, 0, BinaryToString($dxjson, 4))
  53. EndFunc   ;==>getjson
复制代码

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2016-10-1 07:49:11 | 显示全部楼层
是做阿里妈妈链接转换吗?
做好的代码分我!
回复

使用道具 举报

发表于 2016-10-1 07:52:54 | 显示全部楼层
淘宝的我做过httponly 的COOKIE,当时弄了很多天
我发的浏览器 XIE里面好像有的
_WinINet_InternetSetCookie
必须在内嵌窗口内,我好像记得
_IEEx_InternetSetCookie("http://www.iqiyi.com/", $__IQIYI)
Func _IEEx_InternetSetCookie($__URL, $__VALUE)
        $__COOKIE = StringRegExp($__VALUE, "\S+\=[^;]*", 3)
        For $i = 0 To UBound($__COOKIE) - 1
                $___COOKIE = StringRegExp($__COOKIE[$i], "(\A\S+?)=([^;]*)", 3)
                _WinINet_InternetSetCookie($__URL, $___COOKIE[1], $___COOKIE[0])
        Next
EndFunc   ;==>_IEEx_InternetSetCookie
还可以把COOKIE 自定义路径
回复

使用道具 举报

发表于 2016-10-1 07:55:29 | 显示全部楼层
session 无法保存在本地,但是可以自己读取,保存,然后用我上面的代码来恢复!
回复

使用道具 举报

 楼主| 发表于 2016-10-1 14:04:12 | 显示全部楼层
回复 8# heavenm


过程很简单   我目前已经用xmlhttp实现了,因为他跟ie共享cookies,所以不存在提取cookies的问题.  只是xmlhttp有诸多不变,想改用winhttp.

用fiddler抓包过程,无非就申请计划   判断最高佣   退出定向 生成连接   这些半天就搞定了

你也是做淘客的?
回复

使用道具 举报

发表于 2016-10-1 14:18:46 | 显示全部楼层
嗯啊!有什么交流的!~~~
你有转换链接的不
回复

使用道具 举报

发表于 2016-12-20 22:38:58 | 显示全部楼层
淘宝的我做过httponly 的COOKIE,当时弄了很多天
我发的浏览器 XIE里面好像有的
_WinINet_InternetSetCoo ...
heavenm 发表于 2016-10-1 07:52


H大,是否可以分享下这个函数呢 _WinINet_InternetSetCookie   
回复

使用道具 举报

发表于 2017-3-12 14:42:36 | 显示全部楼层
回复 7# cxlater


你好,我按照你的代码,发现取不了一号店的 ut 这个cookie,能帮我看下是为什么么





ut 在登陆后能用httpwatch 看到
  1. #include <IE.au3>
  2. #include <EditConstants.au3>
  3. #include <GUIConstantsEx.au3>
  4. #include <WindowsConstants.au3>
  5. #include <ARRAY.AU3>
  6. #include <WinAPI.au3>
  7. $Form1 = GUICreate("Form1", 623, 600, 192, 114)
  8. $ieobj = _IECreateEmbedded()
  9. GUICtrlCreateObj($ieobj, 0, 0, 617, 393)
  10. _IENavigate($ieobj, "https://passport.yhd.com/passport/login_input.do?")
  11. $Ele = _IEGetObjById($ieobj,"un")
  12. _IEFormElementSetValue($Ele,"13078480989")
  13. $Ele = _IEGetObjById($ieobj,"pwd")
  14. _IEFormElementSetValue($Ele,"9zuzz4yk9")
  15. ;账号:13078480989        密码:9zuzz4yk9

  16. $Edit1 = GUICtrlCreateEdit("", 0, 400, 617, 140, $WS_VSCROLL)
  17. $button = GUICtrlCreateButton("提交", 270, 560, 80, 30)
  18. GUISetState(@SW_SHOW)

  19. While 1
  20.         $nMsg = GUIGetMsg()
  21.         Switch $nMsg
  22.                 Case $GUI_EVENT_CLOSE
  23.                         Exit
  24.                 Case $button
  25.                         getjson()
  26.         EndSwitch
  27.         $cookies = _IEDocGetObj($ieobj).cookie
  28.         If GUICtrlRead($Edit1) <> $cookies Then GUICtrlSetData($Edit1, $cookies)
  29. WEnd
  30. Func getjson()
  31.         Global $INTERNET_COOKIE_HTTPONLY = 8192 ;Requires IE 8 or higher
  32.         Global $INTERNET_COOKIE_THIRD_PARTY = 131072
  33.         Global $INTERNET_FLAG_RESTRICTED_ZONE = 16
  34.         Global $sUrl = _IEPropertyGet($ieobj ,"locationurl")
  35.         Global $sCookieName = 'ut'
  36.         Global $tSize = DllStructCreate("dword[10000]")
  37.         Global $tBuffer = DllStructCreate('char[10000]')
  38.         Global $getcookies = DllCall("wininet.dll", _
  39.                         "bool", "InternetGetCookieExW", _
  40.                         'wstr', $sUrl, _
  41.                         'wstr', $sCookieName, _
  42.                         "ptr", DllStructGetPtr($tBuffer), _
  43.                         "ptr", DllStructGetPtr($tSize), _
  44.                         "dword", $INTERNET_COOKIE_HTTPONLY, _
  45.                         "ptr", Null _
  46.                         )
  47.         If Not _WinAPI_GetLastError() Then ConsoleWrite(DllStructGetData($tBuffer, 1) & @CRLF)
  48.         ConsoleWrite(_WinAPI_GetLastError() & @CRLF)
  49.         _ArrayDisplay($getcookies)
  50. EndFunc   ;==>getjson
复制代码

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2017-3-12 22:28:32 | 显示全部楼层
请问  _IEDocGetObj($ieobj).cookie
获取httponly的cookie, 有解决了这个问题么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2019-12-10 08:01 , Processed in 0.062499 second(s), 16 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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