2017-08-18 116 views
0

我想訪問包含數據的json頁面。 說,它在那裏根據http://example.com/home/apples.json 它受保護,所以顯示登錄頁面。 如果我要手動訪問它,我首先去http://example.com/那裏我得到一個登錄菜單,並在登錄後說用戶「測試」與密碼「測試」訪問http://example.com/home/apples.json again將顯示我的JSON數據。curl - 如何從登錄後獲取cookie以發送curl命令?

如果我做了

curl -u test:test http://example.com/home/apples.json -v 

我在登錄頁面結束。 (儘管認證。)

如果我訪問http://example.com/並手動登錄,我將在登錄後得到一個cookie。說這個cookie被稱爲ltoken並獲得值「dj8f」。它只會在成功登錄後纔會顯示。當我看到它通過瀏覽器和複製的cookie數據並將其連接到curl命令:

curl -b "ltoken="dj8f" http://example.com/home/apples.json -v 

它會奏效。

如何從登錄後獲取cookie數據而無需手動執行? 是否有可能通過bash shell腳本方式?如果是的話如何?或者,如何在groovy腳本中完成?

回答

1

您必須首先使用curl執行正確的登錄。爲了做到這一點,請導航到登錄頁面並查看源代碼。登錄表單應該看起來像這樣。

<form action="http://example.com/login/target" method="POST"> 
    <input type="text" name="username" /> 
    <input type="password" name="passphrase" /> 
    <input type="submit" value="Log in" /> 
</form> 

(我假設有沒有隱藏的輸入字段。隱藏輸入字段經常被用來防止僞造請求,這基本上就是我們要做的。)

從這個剪斷你有提取登錄請求的目標(在本例中爲http://example.com/login/target)HTML輸入字段的名稱(此處爲usernamepassphrase)。執行登錄過程中,你應該通過執行發送的登錄信息發送到目標,例如

curl --cookie-jar cookies.txt --form passphrase=test --form username=test http://example.com/login/target 

(請注意,一般不建議用這種方法在命令行中輸入您的密碼。您的密碼可能存儲在命令歷史記錄中,並可能被盜取。)

--cookie-jar選項告訴curl將所有cookie存儲在文件中。如果登錄成功並且服務器設置了會話cookie,curl會將它們保存在此文本文件中。

成功登錄後,如果請求包含來自cookie-jar的cookie,您應該能夠訪問json文件。這可以通過參數-b來實現。如果-b不包含=字符,curl將使用該文件的內容作爲cookie。

curl -b cookies.txt http://example.com/home/apples.json -v 
+0

我已經試過這個,但是寫入該文件的cookie在登錄後不包含相關的cookie,但只有在登錄之前。因此,subsquent curl命令只會再次引用登錄頁面。在描述中我已經說得更好了。 – kumoyadori

+0

好吧,好吧,我假設登錄工作了......如果不是這樣,你必須*假裝填寫登錄表單*。 AFAIK'-u'選項用於通過'HTTP'字段發送登錄信息。這在當今很少使用。通常您必須查看登錄頁面的'

',並找出:名稱/密碼字段的名稱和提交的目標。然後您可以使用'--form'或'--data'發送表單數據。 – sauerburger

+0

我已經概述了,這可以怎麼做。 – sauerburger