我试图从几个客户端网站使用cURL检索服务器响应来检索仅包含在microtime调用中的头部以计算完整执行时间(用于服务器往返),以及HTTP状态代码,以便我和客户可以了解任何问题。PHP cURL在一些服务器上返回400的头部请求
我需要通过服务器IP调用cURL并在那里定义主机,因为我希望100%确保消除DNS服务器停机时间 - 我使用另一个脚本来确保我的DNS副本是最新的,所以这是没什么大不了。
我正在使用90%的服务器上工作的以下代码,但奇数人拒绝400和404代码,尽管可以在浏览器中访问。
// Setup headers
$header[] = "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: en-us,en;q=0.5";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Host: $this->url";
$header[] = "Keep-Alive: 300";
$header[] = "Pragma: "; // browsers keep this blank.
$starttime = microtime(true);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://{$this->ip}/");
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_USERAGENT,"MyMonitor/UpCheck");
// curl_setopt($curl, CURLOPT_REFERER, 'http://www.mysite.com/');
curl_setopt($curl, CURLOPT_HTTPGET, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout); //timeout in seconds
$this->header = curl_exec($curl);
$this->statuscode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
该代码包装在一个对象中,所有相关的变量都被正确传递,修剪和消毒。因为我需要调用服务器IP,所以将其作为CURLOPT_URL传递,并将URL传递到Header中。我试过设置引用者,但这没有帮助。
感谢,
它们是否可以在浏览器中使用_使用ip而不是address_? – 2013-05-11 13:15:44
不直接,不 - 这些网站都在共享主机或VPS主机上,所以它需要地址来识别服务器中的网站。我怀疑这可能是客户端服务器配置的结果,但希望有一种解决方法。 – 2013-05-11 15:09:12