在NTLM身份验证之后,PHP / curl请求丢弃POST正文和HTTP标头

时间:2017-10-18 22:45:13

标签: php curl tfs http-headers ntlm

我正在尝试使用Node.js和PHP作为数据的主要处理器,在本地Microsoft TFS REST端点上构建双向Slack集成。我可以使用NTLM身份验证成功执行针对本地TFS安装的GET,并将数据解析为Slack。所以我知道(1)端点正在工作,(2)我能够对它进行身份验证,以及(3)我可以毫无问题地从中获取数据。

我遇到阻塞点的方法是尝试将查询发布到TFS端点并获得成功的响应。我在PHP中生成POST请求,当它针对不安全的网站执行时,POST正文和标题通过就好了。但是,当我将该POST请求上的URL更改为受NTLM层保护的TFS端点时,我收到一条错误消息,指出内容类型无效(TFS需要“application / json”,并且它收到的请求没有标题,默认为“application / x-www-form-urlencoded”并失败)。

看起来某种程度上请求正文和标题没有被传递到NTLM身份验证步骤之外,但我不知道为什么会这样,也不知道如何确保它将会通过。我已经在线查看了一些提示和技巧,但还未能突破。

这是我正在使用的最新版PHP代码:

$ch = curl_init();
curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_URL,$baseURL);    
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POSTREDIR,3);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postBody);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: application/json',
    'Transfer-Encoding: chunked',
    'x-metadata: testing',
    'x-testing: This is a value'
));

有关如何确保POST正文和HTTP标头通过NTLM层存活的任何想法?

0 个答案:

没有答案