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

PHP通过CURL向WebService发送XML请求无响应排查求助

我来帮你捋捋这个问题,你现在遇到的情况其实挺常见的,大概率是CURL配置没做全,或者对这个SOAP服务的调用逻辑没摸准,咱们一步步排查:

1. 先补全CURL的核心配置(你贴的代码明显没写完)

很多时候空响应都是因为漏了关键的CURL选项,比如没开启返回结果、没设置POST请求头,给你一个完整的配置参考:

$request = build_xml();
$length = strlen($request);
// 注意:WSDL是服务描述文件,实际调用的端点通常不带?wsdl,后面会说怎么找正确地址
$url = "https://sonwin-test.forsyningsit.dk/XMLBasisWS.svc"; 

$curl = curl_init();

// 核心必选配置
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true); // 明确是POST请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $request); // 传入XML请求体
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 关键!让CURL把响应返回给变量,而不是直接输出

// 设置请求头(SOAP服务必须的)
curl_setopt($curl, CURLOPT_HTTPHEADER, [
    "Content-Type: text/xml; charset=utf-8",
    "Content-Length: " . $length,
    // 如果是SOAP服务,还需要加SOAPAction头,具体值要从WSDL里找,比如:
    // "SOAPAction: \"http://forsyningsit.dk/IXMLBasisWS/YourOperationName\""
]);

// 测试环境临时跳过证书验证(生产环境绝对不能这么做!)
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

// 执行请求
$data = curl_exec($curl);

// 一定要检查CURL错误!这是排查问题的关键
if(curl_errno($curl)){
    echo "CURL错误:" . curl_error($curl);
}

curl_close($curl);
var_dump($data);
2. 确认WebService的实际调用地址

你用的https://sonwin-test.forsyningsit.dk/XMLBasisWS.svc?wsdl是WSDL描述文件的地址,不是实际调用服务的端点。你可以打开这个WSDL链接,搜索<soap:address location="..." />标签,里面的URL才是你应该填到$url里的地址。

3. 检查XML请求是否符合SOAP规范

如果这是个SOAP服务,你的XML不能只是单纯的业务数据,必须包裹在SOAP信封里,比如:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <!-- 这里放你build_xml()生成的业务内容 -->
  </soap:Body>
</soap:Envelope>

如果你的XML没有这个信封,服务可能无法识别请求,只会返回一个默认的“无错误”提示,却不给实际响应。

4. 开启CURL调试日志,抓请求细节

要是还是有问题,开启详细调试日志,看看发送的请求和服务返回的细节:

// 在curl_exec前添加这几行
curl_setopt($curl, CURLOPT_VERBOSE, true);
$verboseLogFile = fopen('php://temp', 'w+');
curl_setopt($curl, CURLOPT_STDERR, $verboseLogFile);

// 执行请求后查看日志
rewind($verboseLogFile);
$logContent = stream_get_contents($verboseLogFile);
echo "<pre>" . htmlspecialchars($logContent) . "</pre>";

日志里会显示请求头、请求体、响应状态码等信息,能帮你精准定位问题。

内容的提问来源于stack exchange,提问作者Tankegang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:14:38