gpt4 book ai didi

http - 如何使用 WinHttpRequest COM 进行登录?

转载 作者:可可西里 更新时间:2023-11-01 15:27:41 27 4
gpt4 key购买 nike

你可以看到很多人在网站上使用鼠标点击和键盘模拟在浏览器窗口或使用 IE COM 来自动化,但对于某些应用程序,你不希望你的应用程序占用数百兆字节的 RAM 并使用大量 CPU呈现网站等的权力

所以问题是:
如何在没有浏览器但使用 WinHttpRequest COM 的情况下使用 AutoHotkey 登录网站/网络服务?

最佳答案

我已经在 AHK 论坛上发布了这个,但我认为这些信息非常有用,也可以在 Stackoverflow 上存档。 :)

工具和入门

首先,如果你想做登录之类的事情,你可能应该学习一些 HTML 和 HTTP 协议(protocol)的基础知识。 FiddlerSetProxy (2,"localhost:8888") 将在调试和逆向工程方面为您提供很多帮助。我还建议使用浏览器的插件来快速 clean your cookies .

示例 1(IP 委员会论坛)

好的,现在让我们看一些例子。登录 autohotkey.com 论坛会是什么样子?
为了对 taht 站点的登录进行逆向工程,我简单地分析了浏览器对 autohotkey.com 的 HTTP 请求(为此在浏览器中使用 Fiddler 或 F12),通过反复试验,我能够将其最小化到最基本的程度。我们正好需要两次请求,登录需要一个请求头,以及3个POST数据参数。

这是我们基本上要做的:

  1. http://www.autohotkey.com/board/index.php?app=core&module=global&section=login 上做一个简单的 GET 请求
  2. 从响应正文 (ResponseText) 中提取登录表单的 auth_key 参数
  3. 创建包含 auth_key 参数以及用于登录的用户名、密码和 rememberMe 参数的 POST 数据字符串
  4. 为下一个请求设置 Content-Type header
  5. 将 POST 数据字符串发送到 http://www.autohotkey.com/board/index.php?app=core&module=global&section=login&do=process
  6. 分析响应正文,检查 HTML 文档标题是否以“登录”一词开头。如果是这样,那么您显然没有登录(登录失败/登录数据错误)。如果标题不同,则登录成功。

例一代码

;Prepare our WinHttpRequest object
HttpObj := ComObjCreate("WinHttp.WinHttpRequest.5.1")
;HttpObj.SetProxy(2,"localhost:8888") ;Send data through Fiddler
HttpObj.SetTimeouts(6000,6000,6000,6000) ;Set timeouts to 6 seconds
;HttpObj.Option(6) := False ;disable location-header rediects

;Set our URLs
loginSiteURL := "http://www.autohotkey.com/board/index.php?app=core&module=global&section=login"
loginURL := "http://www.autohotkey.com/board/index.php?app=core&module=global&section=login&do=process"

;Set our login data
username := "Brutosozialprodukt"
password := "xxxxxxxxxxxxxx"
rememberMe := "1"

;Step 1
HttpObj.Open("GET",loginSiteURL)
HttpObj.Send()

;Step 2
RegExMatch(HttpObj.ResponseText,"<input\stype='hidden'\sname='auth_key'\svalue='(\w+)'\s/>",match)
auth_key := match1

;Step 3
loginBody := "auth_key=" auth_key "&ips_username=" username "&ips_password=" password "&rememberMe=" rememberMe

;Step 4/5
HttpObj.Open("POST",loginURL)
HttpObj.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
HttpObj.Send(loginBody)

;Step 6
If (InStr(HttpObj.ResponseText,"<title>Sign In"))
MsgBox, The login failed!
Else
MsgBox, Login was successfull!

如果正确更改 URL,这可能适用于大多数 IPB 论坛。

例子2(phpbb论坛)

让我们再次登录到新的/其他 AHK 论坛(这会容易得多)。

  1. 创建包含用户名、密码和自动登录参数的 POST 数据
  2. 设置内容类型标题
  3. 将 POST 数据发送到 http://ahkscript.org/boards/ucp.php?mode=login
  4. 分析响应正文,检查 HTML 文档标题是否以单词“登录”开头。如果是这样,那么您显然还没有登录(登录失败/登录数据错误)。如果标题不同,则登录成功。

示例2代码

;Prepare our WinHttpRequest object
HttpObj := ComObjCreate("WinHttp.WinHttpRequest.5.1")
;HttpObj.SetProxy(2,"localhost:8888") ;Send data through Fiddler
HttpObj.SetTimeouts(6000,6000,6000,6000) ;Set timeouts to 6 seconds
;HttpObj.Option(6) := False ;disable location-header rediects

;Set our URLs
loginURL := "http://ahkscript.org/boards/ucp.php?mode=login"

;Set our login data
username := "Brutosozialprodukt"
password := "xxxxxxxxxxxxxx"
autologin := "on"

;Step 1
loginBody := "username=" username "&password=" password "&autologin=" autologin "&login=Login"

;Step 2/3
HttpObj.Open("POST",loginURL)
HttpObj.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
HttpObj.Send(loginBody)

;Step 4
If (InStr(HttpObj.ResponseText,"<title>Login"))
MsgBox, The login failed!
Else
MsgBox, Login was successfull!

如果正确更改 URL,这可能适用于大多数 phpbb 论坛。

关于http - 如何使用 WinHttpRequest COM 进行登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29458900/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com