我試圖從幾個客戶端網站使用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