我在多个站点/服务器上运行相同的代码.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;
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
编辑总结基于进一步的调查,当脚本错误时,服务器访问日志中没有任何注册.因此,在授予/记录访问权限之前,似乎拒绝包含POST选项的CURL请求...
干杯
格雷格J
小智 5
我知道这是一个老线程,但我找到了一个解决方案可能会让别人头疼:
我刚刚开始在GoDaddy托管的网站遇到这个确切的问题,该网站一直工作到最近.为了解决这个问题,我创建了一个HTML页面,其中的表单包含通过cURL在POST数据中提交的相同字段.
浏览器提交的HTML表单有效,而cURL POST导致Empty reply from server
错误.所以我检查了浏览器提交的标题和cURL使用apache_request_headers()
我的开发系统上的PHP 函数提交的标题之间的区别,其中cURL和浏览器提交都有效.
只要我将浏览器提交的"User-Agent"标头添加到cURL POST,问题网站就会按预期工作,而不是返回空的回复:
CURLOPT_HTTPHEADER =>
array("User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0")
Run Code Online (Sandbox Code Playgroud)
我没有尝试其他/更简单的User-Agent标头,因为这个快速解决方案解决了我的问题.