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

ms1*_*013 100 linux cookies bash curl http-authentication

我有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
Run Code Online (Sandbox Code Playgroud)

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

Mec*_*ail 120

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

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work
Run Code Online (Sandbox Code Playgroud)

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

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

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a
Run Code Online (Sandbox Code Playgroud)

然后在运行第二个时再读它们:

curl --cookie ./somefile https://xyz.com/b
Run Code Online (Sandbox Code Playgroud)

或者,您可以尝试在同一命令中下载这两个文件,我认为这些命令将使用相同的cookie.


use*_*ser 93

您也可以通过浏览器登录并获取包含cookie的所有标头的命令:

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

截图

  • 这是一个很深的答案!它没有直接回答这个问题,因为它显示*如何*来回答它. (10认同)
  • 这是最有用的答案之一.它确实允许您观察和理解甚至多步验证. (4认同)
  • 我不知道隐藏在那些很棒的工具中的这个功能。超级有用! (4认同)

Joe*_*lls 47

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

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您有一个希望提交表单的网站,这将有效.您需要查看源代码并找到<form>图像,并查看字段的名称以及需要过帐的URL.您可以使用Web浏览器调试器查找发布请求,以便查看正在发送的内容.这有点容易. (8认同)

Tim*_*inn 5

我的答案是 @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 上尝试过了,效果非常好。