我想访问一个包含数据的json页面。假设它在http://example.com/home/apples.json
下,它是受保护的,所以会显示一个登录页面。如果我要手动访问它,我首先转到http://example.com/
,在那里我会得到一个登录菜单,在以用户"test“和密码"test”登录后,访问http://example.com/home/apples.json again
将显示json数据。
如果我做一个
curl -u test:test http://example.com/home/apples.json -v
我最终进入了登录页面。(尽管进行了身份验证。)
如果我访问http://example.com/并手动登录,我将在登录后获得cookie。假设这个cookie名为ltoken,并获得值"dj8f“。只有在成功登录后才会显示。当我通过浏览器查找它并复制cookie数据并将其附加到curl命令时:
curl -b "ltoken="dj8f" http://example.com/home/apples.json -v
看起来不错。
如何在登录后获取cookie数据,而无需手动操作?可以通过bash shell脚本方式实现吗?如果是,是如何实现的?或者,如何在groovy脚本中完成此操作?
发布于 2017-08-18 19:30:01
您必须先使用curl执行正确的登录。为此,请导航到登录页面并查看源代码。登录表单应该如下所示。
<form action="http://example.com/login/target" method="POST">
<input type="text" name="username" />
<input type="password" name="passphrase" />
<input type="submit" value="Log in" />
</form>
(我假设没有隐藏的输入字段。隐藏输入字段通常用于防止请求伪造,这基本上就是我们要做的。)
从这个片段中,您必须提取登录请求的目标(在本例中为http://example.com/login/target
)、HTML输入字段的名称(此处为username
和passphrase
)。要执行登录过程,您应该将登录信息发送到目标,例如,通过执行
curl --cookie-jar cookies.txt --form passphrase=test --form username=test http://example.com/login/target
(请注意,通常不建议以这种方式在命令行中键入密码。您的密码可能存储在命令历史记录中,可能会被窃取。)
--cookie-jar
选项告诉curl将所有cookie存储在一个文件中。如果登录成功,并且服务器设置了会话cookie,curl将把它们保存在这个文本文件中。
成功登录后,如果请求包含来自cookie-jar的cookie,您应该能够访问json-file。这可以通过-b
参数来实现。如果-b
不包含=
字符,curl将使用文件的内容作为cookie。
curl -b cookies.txt http://example.com/home/apples.json -v
https://stackoverflow.com/questions/45755084
复制相似问题