groovy curl -如何在登录后获取cookie以发送curl命令?

kqhtkvqz  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(133)

我想访问一个包含数据的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脚本中完成?

zhte4eai

zhte4eai1#

你必须首先使用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输入字段的名称(在这里为usernamepassphrase)。

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文件。这可以通过-b参数实现。如果-b不包含=字符,curl将使用文件的内容作为cookie。

curl -b cookies.txt http://example.com/home/apples.json -v

相关问题