Я пытаюсь протестировать ответ сервера с нескольких клиентских сайтов, используя cURL, чтобы получить только заголовок, завернутый в вызов microtime, чтобы вычислить полное время выполнения (для серверного roundtrip) и код состояния HTTP, чтобы я и клиент могли знать о любых проблемах.PHP cURL Запрос заголовка, возвращающий 400 на некоторых серверах
Мне нужно позвонить cURL по IP-адресу сервера с указанным там хостом, поскольку я хочу быть на 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-адресом, переданным в заголовке. Я попытался установить рефери, но это не помогло.
Спасибо,
Доступны ли они в браузере _ использование ip вместо адреса_? –
Не напрямую, нет - все сайты размещены на общем хостинге или VPS-хостинге, поэтому ему нужен адрес для определения сайта на сервере. Я подозреваю, что это может быть результатом конфигурации сервера клиента, но надеюсь, что есть способ обойти это. –