我在多个站点/服务器上运行相同的代码。2 天前,代码开始在其中一台服务器上返回 http_code = 0 和错误消息“来自服务器的空回复”。
任何人都可以解释为什么某个特定的服务器会在一天工作,然后在下一天不工作?我已经向 ISP 提交了一张票,解释了这个问题,但他们似乎无法找到问题所在(还)。
我想问题真的是,在服务器上会/可能会改变什么来阻止它工作?
有趣的是我引用的 url 在返回错误的服务器上没有被触及。如果我将 url 更改为指向不存在的内容,则会返回相同的错误。因此,服务器似乎拒绝了 CURL POST 引用。我目前有其他 CURL 脚本正在访问这些仍在工作的问题站点,但它们中没有 POST 选项。
该问题肯定与此服务器上的 CURL POST 请求有关,并且它们几乎立即被拒绝。
在有问题的服务器上,我有 15 个以上的单独帐户,每个帐户都返回相同的结果,所以我认为我没有更改任何内容,因为我知道在此问题出现时我没有对所有站点进行任何大规模更改。在我在其他地方托管的其他 6 个站点中,使用完全相同的代码,一切仍然正常。
我已尝试对已阅读帖子中的选项进行各种组合/更改,但并没有真正产生影响,工作站点仍然有效,而非工作站点仍然无效。
function sendWSRequest($url, $xml) {
// $headers[] = 'Content-Type: application/xml; charset=utf-8';
$headers[] = 'Content-Type: text/xml; charset=utf-8';
$headers[] = 'Content-Length: ' . strlen($xml);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, true);
// curl_setopt($ch, CURLINFO_HEADER_OUT, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
$result = curl_exec($ch);
if($result===false) {
print 'error with curl - '.curl_error($ch).'<br />';
}
$info = curl_getinfo($ch);
curl_close($ch);
return $result;
}
任何帮助将不胜感激。
编辑根据进一步调查总结,当脚本错误时,服务器访问日志中没有任何记录。因此,在授予/记录访问权限之前,似乎包含 POST 选项的 CURL 请求被拒绝...
干杯
格雷格·J