首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >curl -如何在登录后获取cookie以发送curl命令?

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

Stack Overflow用户
提问于 2017-08-18 19:01:05
回答 1查看 17.2K关注 0票数 5

我想访问一个包含数据的json页面。假设它在http://example.com/home/apples.json下,它是受保护的,所以会显示一个登录页面。如果我要手动访问它,我首先转到http://example.com/,在那里我会得到一个登录菜单,在以用户"test“和密码"test”登录后,访问http://example.com/home/apples.json again将显示json数据。

如果我做一个

代码语言:javascript
运行
复制
curl -u test:test http://example.com/home/apples.json -v

我最终进入了登录页面。(尽管进行了身份验证。)

如果我访问http://example.com/并手动登录,我将在登录后获得cookie。假设这个cookie名为ltoken,并获得值"dj8f“。只有在成功登录后才会显示。当我通过浏览器查找它并复制cookie数据并将其附加到curl命令时:

代码语言:javascript
运行
复制
curl -b "ltoken="dj8f" http://example.com/home/apples.json -v

看起来不错。

如何在登录后获取cookie数据,而无需手动操作?可以通过bash shell脚本方式实现吗?如果是,是如何实现的?或者,如何在groovy脚本中完成此操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-18 19:30:01

您必须先使用curl执行正确的登录。为此,请导航到登录页面并查看源代码。登录表单应该如下所示。

代码语言:javascript
运行
复制
<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)。要执行登录过程,您应该将登录信息发送到目标,例如,通过执行

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
curl -b cookies.txt http://example.com/home/apples.json -v
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45755084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档