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实施的更多信息,就不能真正回答。 –