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

时间:2012-09-13 03:38:53

标签: linux bash cookies curl http-authentication

我有两页:xyz.com/axyz.com/b。当且仅当我首先登录xyz.com/b时,我才能访问xyz.com/a。如果访问xyz.com/b而不通过另一个,我只是通过浏览器拒绝访问(没有重定向登录)。一旦我在xyz.com/a登录,我就可以访问另一个。

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

我使用以下内容:

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

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

4 个答案:

答案 0 :(得分:111)

网站可能会使用cookies来存储您的会话信息。当你运行

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。

答案 1 :(得分:80)

此外,您可能希望通过浏览器登录并获取包含cookie的所有标头的命令:

打开开发者工具的网络选项卡,登录,导航到所需页面,使用"复制为cURL"。

screenshot

答案 2 :(得分:44)

经过一些谷歌搜索后,我发现了这个:

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

不知道它是否有效,但它可能会引导你朝着正确的方向前进。

答案 3 :(得分:0)

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

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

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

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

    • 'login_cookie.txt'

我已经在Ubuntu 20.04上进行了尝试,它的工作原理就像一个魅力。