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響應。
哦,我想,最終URL的'&'和'%26'更換的情況下,Apache服務器處理請求在某種程度上窒息在那。相同的400結果。 – Phrogz
這看起來像是貴公司的SSO系統的問題,而不是MediaWiki本身。唉,這可能也意味着如果沒有關於SSO實施的更多信息,就不能真正回答。 –