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

WordPress向SOAP服务发送XML POST请求无响应问题求助

WordPress向SOAP服务发送XML POST请求无响应问题求助

看起来你已经用ReadyAPI确认了SOAP端点能正常接收数据,但自己写的wp_remote_post和Curl代码都返回空白,这种情况确实挺让人挠头的。我来给你几个实际的排查方向,应该能帮你定位问题:

1. 先加上错误捕获,别让错误“隐身”

你现在的代码完全没做错误处理,空白响应可能是请求过程中出了错,但你没捕获到。

针对wp_remote_post的错误排查:

修改代码,加上WP错误检查和完整响应打印:

$tpn_send = wp_remote_post(
    $url,
    array(
        'method' => 'POST',
        'timeout' => 45,
        'redirection' => 5,
        'httpversion' => '1.1', // 试试改成HTTP/1.1,很多SOAP服务要求这个
        'headers' => $headers,
        'body' => $xml_body,
        'sslverify' => false
    )
);

// 检查WP错误
if (is_wp_error($tpn_send)) {
    echo 'WP请求错误:' . $tpn_send->get_error_message();
} else {
    // 打印完整响应,包括状态码和响应头
    echo '响应状态码:' . $tpn_send['response']['code'] . '<br>';
    echo '响应头:<pre>' . print_r($tpn_send['headers'], true) . '</pre>';
    echo '响应体:<pre>' . print_r($tpn_send['body'], true) . '</pre>';
}

针对Curl的错误排查:

给Curl加上错误捕获,同时打印详细调试信息:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_body);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 补充SSL相关选项,避免证书验证问题
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// 开启详细调试(调试完成后可关闭)
curl_setopt($ch, CURLOPT_VERBOSE, true);
$verbose = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_STDERR, $verbose);

$response = curl_exec($ch);

// 检查Curl错误
if(curl_errno($ch)){
    echo 'Curl错误:' . curl_error($ch);
} else {
    echo '响应状态码:' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . '<br>';
    echo '响应体:<pre>' . print_r($response, true) . '</pre>';
}

// 打印调试日志
rewind($verbose);
$verboseLog = stream_get_contents($verbose);
echo 'Curl调试日志:<pre>' . $verboseLog . '</pre>';

curl_close($ch);
fclose($verbose);

2. 检查SOAPAction头的格式

很多SOAP服务要求SOAPAction头的值用双引号包裹,你当前的写法可能不符合要求,修改headers数组里的这一行:

"SOAPAction: \"http://foobarMethod\""

3. 去掉手动设置的Content-Length头

手动计算Content-Length很容易出错(比如XML里的特殊字符、编码问题),不如让wp_remote_post或Curl自动处理这个头。直接从$headers数组里删掉这一行试试,大部分服务端会自动识别请求体长度。

4. 对比ReadyAPI的请求和你的代码请求

把ReadyAPI里发送的请求头、请求体和你代码里的$headers、$xml_body逐行对比:

  • 确认XML的命名空间、标签结构完全一致,有没有遗漏的闭合标签或拼写错误
  • 确认请求头的所有字段(比如Content-Type的参数)和ReadyAPI里的完全匹配

5. 调整HTTP版本

你在wp_remote_post里用的是httpversion => '1.0',但很多SOAP服务要求HTTP/1.1,改成'httpversion' => '1.1'试试。

按照这些步骤排查,应该能找到问题所在——比如可能是SOAPAction头格式不对、XML有语法错误,或者是SSL验证的隐藏问题。

备注:内容来源于stack exchange,提问作者Bastion2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:22:33