我有 2 页:xyz.example/a
和 xyz.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,所以这不是问题。
最佳答案
该网站可能使用 cookies存储您的 session 信息。当你运行时
curl --user user:pass https://xyz.example/a #works ok
curl https://xyz.example/b #doesn't work
curl
在两个单独的 session 中运行两次。因此,当第二个命令运行时,第一个命令设置的 cookie 不可用;这就像您在一个浏览器 session 中登录页面 a
,并尝试在另一个浏览器 session 中访问页面 b
。
你需要做的是保存第一条命令创建的cookies:
curl --user user:pass --cookie-jar ./somefile https://xyz.example/a
然后在运行第二个时将它们读回:
curl --cookie ./somefile https://xyz.example/b
或者,您可以尝试在同一命令中下载这两个文件,我认为这将使用相同的 cookie。
关于linux - CURL 用于访问需要从其他页面登录的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12399087/