在我们的PHP应用程序中,我们需要以以下方式构建PHP curl扩展,以支持以下功能:
- WinSSL(访问Windows证书存储)
- NTLM,Basic和Digest身份验证
- HTTP/2支持
- SSH2支持
- IPv6支持
- 将其与WinSSL链接
- 将其与nghttp2链接
- 将其与libssh2链接
- 启用IPv6
nmake /f Makefile.vc mode=dll VC=15 ENABLE_WINSSL=yes DEBUG=no MACHINE=x64 ENABLE_SSPI=no WITH_NGHTTP2=dll WITH_ZLIB=static WITH_SSH2=static WITH_DEVEL=C:\curl\deps-x64
在 winbuild/
子文件夹中。然后我针对结果编译了 PHP 的 curl 扩展。
使用这个结果,当对提供基本身份验证、摘要身份验证、NTLM 和协商身份验证(Exchange Web服务)的 Web 服务进行 HTTP 请求时,我遇到了以下错误行为:
如果使用
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
,一切都正常。如果使用
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
,一切也正常。如果使用
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM | CURLAUTH_BASIC);
,身份验证失败。
失败的请求包含一个 NTLM 令牌,该令牌过于短小(似乎在某个点被截断)。一些谷歌搜索表明,这可能是由于 curl 编译时使用了 SSPI。但是,我无法禁用 SSPI,因为 WinSSL 需要它。
有人知道解决方法吗?如何获得一个满足所有上述要求的 PHP-curl 扩展?
CURLAUTH_NTLM | CURLAUTH_BASIC
的CURLOPT_VERBOSE日志? - hanshenrik