ChatGPT解决这个技术问题 Extra ChatGPT

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

我有 2 页:xyz.example/axyz.example/b。只有当且仅当我先登录到 xyz.example/a 时,我才能访问 xyz.example/b。如果不通过另一个访问 xyz.example/b,我只需通过浏览器拒绝访问(不重定向到登录)。在 xyz.example/a 登录后,我可以访问另一个。

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

我使用以下内容:

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

我已经尝试使用带有 & 而没有用户/密码部分的第二行,但仍然无法正常工作。两个页面都使用相同的 CA,所以这不是问题。


S
Stephen Ostermiller

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

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

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

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

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

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

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

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


这很奇怪,因为当我尝试这样做时,它不起作用,因为存储在 somefile 中的 cookie 包含路径参数(在本例中为 /a)并且它不会转发到第二个调用。如果我在文件中编辑 cookie 并只放置一个斜杠,它就可以工作(cookie 转发到第二个调用)。您知道是否可以阻止将路径存储在 cookie 文件中?
u
user

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

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

https://i.stack.imgur.com/DePbs.png


这是一个深刻的答案!它不直接回答问题,因为它显示了如何回答它。
这是最有用的答案之一。它确实可以让您观察和理解甚至是多步骤身份验证。
我不知道隐藏在那些很棒的工具中的这个功能。超级好用!
如果我只能在浏览器中找到它,那正是我所需要的。你必须以某种方式启用它吗?我的上下文菜单中缺少它。 FF 97.0.2,Linux。
J
Joe Mills

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

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

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


如果您有一个希望提交表单的网站,这将起作用。您将需要查看源代码并找到
图像并查看字段的名称以及需要发布到的 URL。您可以使用 Web 浏览器调试器来查找发布请求,以便查看正在发送的内容。这更容易一些。
T
Timothy C. Quinn

我的回答是@JoeMills 和@user 的一些先前回答的模型。

获取 cURL 命令以登录服务器:加载网站登录页面并打开开发人员工具的网络窗格在 Firefox 中,右键单击页面,选择“检查元素 (Q)”并单击网络选项卡转到登录表单,输入用户名、密码并登录 登录后,返回网络窗格并滚动到顶部以找到 POST 条目。右键单击并选择 Copy -> Copy as CURL 将其粘贴到文本编辑器并在命令提示符下尝试此操作以查看它是否有效 某些站点可能已加固,将阻止此类登录欺骗,需要以下更多步骤才能绕过.修改 cURL 命令以在登录后保存会话 cookie 删除条目 -H 'Cookie: ' 在 curl 开头添加 -c login_cookie.txt 尝试运行此更新的 curl 命令,您应该会得到一个新文件 'login_cookie. txt' 在同一个文件夹中使用这个新的 cookie 调用一个新的网页,需要你登录 curl -b login_cookie.txt

我在 Ubuntu 20.04 上试过这个,它就像一个魅力。


如果网站也要求验证码,那么它必须如何编写参数?
cURL 不可能。也许使用像 puppeteer 这样的东西以编程方式导航页面。