2015-04-29 46 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