2012-09-13 106 views
66

我有2页:xyz.com/axyz.com/b。我只能访问xyz.com/b当且仅当我先登录到xyz.com/a。如果访问xyz.com/b时未经过其他浏览器,我只是通过浏览器访问被拒绝(无重定向登录)。一旦我在xyz.com/a登录,我可以访问其他。CURL访问需要从不同页面登录的页面

我的问题是使用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,所以这不是问题。有什么建议么?由于

回答

81

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

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

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

你需要做的是第一个命令创建保存饼干:连续第二时

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

,然后读回:

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

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

+0

这很奇怪,因为当我尝试这个时,它不起作用,因为存储在'somefile'中的cookie包含路径参数('/ a'在这种情况下)并且它不被转发到第二个呼叫。如果我在文件中编辑cookie并仅使用斜线,它将起作用(cookie将转发到第二个调用)。你知道是否有可能阻止在cookie文件中存储路径吗? –

36

一些google搜索后,我发现这一点:

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

不知道,如果它的工作原理,但它可能会导致你在正确的方向。

+0

工作没有那个'-D“XXX”'还是谢谢你 – deadfish

+5

如果你有一个网站,希望提交一个表单这将工作。您需要查看源代码并找到

图片,然后查看这些字段的名称以及需要发布哪些网址。您可以使用Web浏览器调试器查找发布请求,以便查看发送的内容。这有点容易。 – stonefury

+0

感谢@stonefury的评论 - 为我节省了很多调试时间:) – Rob1991

36

而且您可能要通过浏览器登录并获得所有标题包括饼干命令:

开放开发工具的网络选项卡,登录,浏览到所需的页面,请使用“复制为卷曲” 。

screenshot

+5

这是一个很深的答案!它不直接回答问题,因为它显示*如何回答它。 – bgStack15

+2

这是最有用的答案之一。它甚至可以让你观察甚至理解多步骤认证。 –

+0

请检查我的问题关于同样的问题https://stackoverflow.com/questions/48391862/login-to-page-using-html-form-and-cookies-for-authentication –