You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cURL调用Zimbra SOAP接口获取Auth Token返回HTML页面问题

用cURL调用Zimbra SOAP接口获取Auth Token时返回HTML而非SOAP响应的问题

我正在使用cURL向Zimbra SOAP服务器发送HTTP POST请求以获取Auth Token,但收到的是HTML页面而非SOAP响应,请问问题出在哪里?以下是我的代码:

$soapXml = <<<EOD
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:zimbraAccount">
        <soap:Header>
            <context xmlns="urn:zimbra"/>
        </soap:Header>
        <soap:Body>
            <AuthRequest xmlns="urn:zimbraAccount">
            <account by="name">{$username}</account>
            <password>{$password}</password>
            </AuthRequest>
        </soap:Body>
        </soap:Envelope>
EOD;

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->zimbraSoapUrl);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $soapXml);
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/soap+xml']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_VERBOSE, true);
$response = curl_exec($curl);

if (curl_errno($curl)) {
    $errorMessage = curl_error($curl);
    curl_close($curl);
    throw new \Exception("Erro cURL: $errorMessage");
}

$response = curl_exec($curl);

curl_close($curl);

return $response;

可能的问题点:

  • 重复执行curl_exec:代码中连续调用了两次curl_exec($curl),第一次执行后已经获取到响应,第二次执行会再次发送请求,不仅浪费资源,还会覆盖第一次的响应结果,可能导致异常。需要删除其中一次调用,只保留首次执行的$response = curl_exec($curl);。
  • SOAP端点URL不正确:确认$this->zimbraSoapUrl是否指向Zimbra正确的SOAP服务端点,标准地址通常为https://你的Zimbra域名/service/soap/。如果URL错误,服务器会返回HTML格式的错误页面或重定向页面。
  • Content-Type请求头不匹配:Zimbra对SOAP请求的Content-Type有严格要求,当前使用的application/soap+xml是SOAP 1.2的格式,若服务器期望SOAP 1.1的text/xml,则会返回错误页面。可以尝试修改请求头为['Content-Type: text/xml; charset=utf-8'],或者补充charset信息:['Content-Type: application/soap+xml; charset=utf-8']。
  • 自动重定向导致跳转:开启了CURLOPT_FOLLOWLOCATION会让cURL自动跟随服务器的重定向指令,如果服务器返回3xx状态码跳转到HTML页面(比如登录页、错误页),就会得到HTML响应。可以关闭该选项,通过curl_getinfo($curl, CURLINFO_HTTP_CODE)查看响应状态码,判断是否存在重定向问题。
  • SOAP XML变量未正确替换:代码中的{$username}和{$password}是否已经被替换为实际的账号密码?如果变量未解析,SOAP请求内容无效,服务器会返回HTML格式的错误提示。

内容的提问来源于stack exchange,提问作者Sérgio Brito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 07:00:10