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

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

我使用以下方法:

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

我试着用第二行&没有用户/密码部分,仍然无法工作.两个页面使用相同的CA,所以这不是问题.有什么建议吗?谢谢

推荐答案

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

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

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

您需要做的是使用第一个命令创建save个cookie:

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

然后在运行第二个命令时重新阅读:

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

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

Linux相关问答推荐

有没有方法在Linux中连接两个程序输出/输入?

是否可以在Bash正则表达式中排除?

删除第二列中数字为零的行

如何使用 Linux 命令行跨子目录查找相似的文件名?

在 Rust 中重命名主线程

使用 sed 或 awk 格式化文本

linux 提取字符串中可能是第二常见模式的部分

如何使用 shell 脚本将文本文件转换为 JSON 文件

访问证书里面的图片

Linux合并文件

std::system 使用什么Shell?

如何在 Linux 上使用 Python 判断进程是否仍在运行?

如何/在哪里可以找到要修复的 Linux 内核错误?

按主机名的 IPv6 地址

如何在不重新打印的情况下更新终端中的打印消息

如何让 GNU 屏幕读取 .bash_profile/.bash_rc 更改?

如何在 Linux 中通过控制台输出启动 Tomcat?

如何在 Linux 中查看日志(log)文件并在查看时应用自定义过滤器?

Anaconda 安装后,conda 命令失败并显示ImportError: no module named conda.cli

适用于 Windows、Linux、MacOS X 的跨平台脚​​本