2012-09-13 104 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 –