CURL访问需要从其他页面登录的页面


124

我有2页:xyz.com/axyz.com/b。我只有在先xyz.com/b登录后才能访问xyz.com/a。如果xyz.com/b不经过其他访问,我只是通过浏览器拒绝访问(没有重定向到登录)。在登录后xyz.com/a,我就可以访问另一个。

我的问题是使用curl命令执行此操作。我可以成功xyz.com/a使用curl 登录,但是尝试xyx.com/b访问后,访问被拒绝。

我使用以下内容:

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

我尝试将第二行与&一起使用,但没有用户/密码部分,但仍然无法正常工作。两个页面都使用相同的CA,所以这不是问题。有什么建议?谢谢

Answers:


146

该网站可能使用cookie来存储您的会话信息。当你跑步

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

curl在两个单独的会话中运行两次。因此,当第二条命令运行时,由第一条命令设置的cookie不可用。就像您a在一个浏览器会话中登录页面,然后尝试在另一个浏览器会话中访问页面b一样。

您需要做的是保存第一个命令创建的cookie:

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a

然后在运行第二个命令时将它们读回:

curl --cookie ./somefile https://xyz.com/b

另外,您可以尝试使用同一命令下载两个文件,我认为它们将使用相同的cookie。


这很奇怪,因为当我尝试此操作时,它不起作用,因为存储在somefile其中的cookie 包含path参数(/a在这种情况下),并且不会转发到第二个调用。如果我在文件中编辑cookie并仅加一个斜杠,它将起作用(将cookie转发给第二个调用)。您是否知道是否可以阻止将路径存储在cookie文件中?
рüффп

123

另外,您可能希望通过浏览器登录并获取带有所有标头(包括cookie)的命令:

打开开发人员工具的“网络”标签,登录,导航到所需页面,使用“复制为cURL”。

屏幕截图


12
这是一个很深的答案!它不会直接回答问题,因为它显示了如何回答。
bgStack15 '17

5
这是最有用的答案之一。它确实使您能够观察和理解甚至多步骤身份验证。
Pierre D

我不知道这些超棒工具中隐藏的该功能。超级有用!
蒂莫西·奎因

52

经过一番谷歌搜索后,我发现了这一点:

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b

不知道它是否有效,但它可能会引导您朝正确的方向发展。


9
如果您有一个希望提交表单的网站,则此方法将起作用。您将需要查看源代码并找到<form>图像,并查看字段的名称是什么以及需要发布到哪个URL。您可以使用Web浏览器调试器查找发布请求,以便查看正在发送的内容。那有点容易。
stonefury 2014年

0

我的答案是@JoeMills和@user的一些先前答案的模版。

  1. 获取cURL命令以登录服务器:

    • 加载网站的登录页面并打开开发人员工具的“网络”窗格
      • 在firefox中,右键单击页面,选择“检查元素(Q)”,然后单击“网络”选项卡
    • 进入登录表格,输入用户名,密码并登录
    • 登录后,返回“网络”窗格并滚动到顶部以找到POST条目。右键单击并选择复制->复制为CURL
    • 将其粘贴到文本编辑器中,然后在命令提示符下进行尝试,以查看其是否有效
      • 某些站点可能进行了加固,从而阻止了这种类型的登录欺骗,这需要下面的更多步骤来绕过。
  2. 修改cURL命令以能够在登录后保存会话cookie

    • 删除条目 -H 'Cookie: <somestuff>'
    • 加入后 curl开始-c login_cookie.txt
    • 尝试运行此更新的curl命令,您应该'login_cookie.txt'在同一文件夹中获得一个新文件
  3. 使用需要您登录的新cookie调用新网页

    • curl -b login_cookie.txt <url_that_requires_log_in>

我已经在Ubuntu 20.04上尝试过了,它就像一个魅力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.