我想通过脚本登录网站。为此,我搜索了 POST 请求的来源。登录网站的 post 请求包含数据“用户名”、“密码”、“时间戳”和“令牌”。但是,当我复制时间戳和令牌并将 post 请求粘贴到我的浏览器地址栏并使用我的用户名和密码时,如下所示:
https://example.com/action/login?__elgg_token=905adbf0c0111fef78a8344c38c8f2a8&__elgg_ts=1461577445&username=foo&password=bar
登录失败。我需要不同的令牌和时间戳吗?
这是来自源头的:
action="https://example.com/action/login" method="post" >
<input type="hidden" name="__elgg_token" value="905adbf0c0111fef78a8344c38c8f2a8" />
<input type="hidden" name="__elgg_ts" value="1461577445" />
<input type="text" name="username" value="" class="form-control login-textarea form-control" />
<input type="password" name="password" value="" class="form-control login-textarea" />
答案1
当我复制时间戳和令牌并粘贴到浏览器地址栏中的 URL 中时...登录失败
据我所知,常见的网络浏览器中的地址栏会导致浏览器发出 HTTP GET 请求,而不是 HTTP POST 请求。
作为类堆叠器评论道。您不能假设 POST 请求可以转换为服务器可以识别的等效 GET 请求。
我想要通过脚本登录一个网站(需要 HTTP POST 请求)
如果您使用的是传统的命令行脚本语言,则可以使用多种工具来发出 POST 请求。
从 shell 脚本中,您可以使用 Wget 或 cURL 等工具发出 POST 请求并捕获任何生成的会话 cookie 等。
使用其他脚本语言或更通用的语言(Perl、Ruby、Python 等)编写的脚本通常具有标准库,可用于发出 POST 和 GET 请求以及管理 cookie 等。
示例来自Wget 手册页
# Log in to the server. This can be done only once.
wget --save-cookies cookies.txt \
--post-data 'user=foo&password=bar' \
http://server.com/auth.php
# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
-p http://server.com/interesting/article.php
其他例子也不难找到