linux – cURL始终使用NTLM返回401

我正在使用 PHP与Microsoft Exchange进行通信.我的生产服务器上的一切正常,但我的开发机器上一直有401未经授权.我尝试从命令行使用curl,我得到相同的结果.

使用以下命令在我的机器上返回“401”:

curl https://mail.example.com/EWS/Exchange.asmx -w %{http_code} --ntlm -u username:password

同样的确切调用在我的生产机器上返回“302”,这是我所期望的.

我的开发机器使用curl 7.19.7,我的生产机器使用curl 7.18.0.

解决方法

这是一个老问题,但如果它最终可以帮助任何人,我想我会发布一个答案.

在某些最新版本的Ubuntu上有一个NTLM和curl的错误(我相信10.04及以上版本).

> Ubuntu:https://bugs.launchpad.net/ubuntu/+source/curl/+bug/675974
> CentOS:https://bugzilla.redhat.com/show_bug.cgi?id=799557

如果您在ubuntu上使用PHP的curl模块,并且您的libcurl版本受此错误的影响,这可以解释您的身份验证请求失败的原因.

如果将verbose标志添加到命令(-v),则应在响应部分中看到类似的内容:

> gss_init_sec_context()失败::找不到凭据缓存文件’/ tmp / krb5cc_1000′

如果你看到这个,你就会受到bug的影响,你必须降级你的库或找到另一台机器.

我希望这会有所帮助:P

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...