2015-04-29 72 views
2

tl; dr:對URL的HTTP請求通過Chrome和Firefox工作,但使用curl失敗。使用curl通過SSO重定向獲取MediaWiki頁面信息

詳細

我公司使用鏈接到MediaWiki用於內部網的wiki。從前,我成功地使用cURL獲取有關使用此命令的頁面信息化應用:

curl -s -k -u "username:password" "https://wiki.intranet/mainwiki/api.php?action=query&titles=SomePage&prop=info&format=xml"

但是,IT部門最近已改變維基使用某種單一登錄系統。如果我現在請求URL,我得到了一系列HTTP 302個重定向,可以通過以下地點去:

  • /sso?request_uri=/mainwiki/api.php?action=query&titles=SomePage&prop=info&format=xml
  • http://wiki.intranet/sso/?request_uri=/mainwiki/api.php%3faction=query&titles=SomePage&prop=info&format=xml
  • https://wiki.intranet/sso/?request_uri=/mainwiki/api.php%3faction=query&titles=SomePage&prop=info&format=xml

當我要求使用捲曲最後網址我從服務器收到400(錯誤請求)響應。隨着-I參數來顯示標題,那就是:

> curl -S -k -I -u "username:password" "https://wiki.intranet/sso/?request_uri=/mainwiki/api.php%3faction=query&titles=SomePage&prop=info&format=xml" 
HTTP/1.1 400 Bad Request 
Date: Wed, 29 Apr 2015 20:47:49 GMT 
Server: Apache/2.2.3 (CentOS) 
Connection: close 
Content-Type: text/html; charset=iso-8859-1 

當我請求同一個URL使用谷歌瀏覽器,但是,我知道我想要的結果!

如何使用curl獲取信息?


編輯:當我要求使用Firefox的原始URL,它也經過同樣的重定向,然後顯示我兩個401(需要授權)狀態。當我在Firefox中填寫用戶名/密碼時,它會帶我通過另一個重定向回到原始URL,在這一點上,它獲得了我想要的XML的狀態200響應。

+0

哦,我想,最終URL的'&'和'%26'更換的情況下,Apache服務器處理請求在某種程度上窒息在那。相同的400結果。 – Phrogz

+0

這看起來像是貴公司的SSO系統的問題,而不是MediaWiki本身。唉,這可能也意味着如果沒有關於SSO實施的更多信息,就不能真正回答。 –

回答

3

最後得到這個通過添加以下工作:

curl -s -k-L --ntlm -c cookies.txt-u "user:pass" "originalurl"

請注意一些頁面建議你可以在Windows上使用-u :轉達您的憑據。這對我不起作用。

這個工作在Windows上使用以下捲曲版本:

c:\> curl --version 
curl 7.36.0 (x86_64-w64-mingw32) libcurl/7.36.0 OpenSSL/1.0.1c zlib/1.2.8 
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp 
Features: Largefile NTLM SSL libz TLS-SRP 
+4

[用戶手冊](http://linux.die。net/man/1/curl)是你的朋友:*如果您使用支持SSPI的curl二進制文件並進行NTLM身份驗證,則可以通過簡單地指定一個冒號來強制curl從您的環境中獲取用戶名和密碼選項:「-u:」*從'--version'的輸出中可以看到,您使用的curl二進制文件已經在沒有SSPI支持的情況下生成。 – Tgr