Curl_getinfo возвращает код статуса HTTP 200 с несуществующими сайтами

Проверяю, что сайт сайта работает и проверяется на код статуса HTTP 200:

<?php
$url = 'www.proxyserver-demo.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if (200==$retcode)
    {
    echo "All well";
    }
else
    {
    echo "not so much";
    }
?>

Каждый сайт, который я пытаюсь, однако, даже несуществующие возвращают 200 OK статус без сбоев, что не должно быть возможным в случае несуществующих. (мой код всегда выводит "Все хорошо" )

Моя ОС - Centos linux, что может быть здесь?

Ответ 1

Извините за злоупотребление полем ответа для того, что, вероятно, должно быть комментарием, но я не могу действительно думать о том, как правильно представить эту информацию в противном случае. Я, честно говоря, еще не знаю, как выбить их комментарии в любую правильно отображаемую и отформатированную фигуру.: - |

В любом случае, поскольку ваш код должен работать нормально, но для вас он всегда перенастраивает "все ОК", пока вы проверяете ответ HTTP, может быть, ваш интернет-провайдер делает DNS-highjacking, который в основном возвращает фальшивые данные ip-адреса, перенаправляя вас на свой собственный сервер, как правило, для денежной прибыли под видом дружелюбия. (ISP-страница, которая показывает, что" эта страница не существует" в сочетании с объявлениями или предложением таких услуг, как регистрация домена и т.д.)

простой способ тестирования - просто запросить данные DNS с помощью приложения, такого как dig. Запрос на правильно функционирующий DNS-сервер для несуществующего домена должен вернуть NXDOMAIN в качестве его статуса:

поэтому, когда мы проверяем полностью поддельный домен notexisting.fake с помощью следующей команды: dig A notexisting.fake., это то, что он обычно должен дать:

[email protected]_Gate:~$ dig A notexisting.fake.

; <<>> DiG 9.7.3 <<>> A notexisting.fake.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 28725
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;notexisting.fake.              IN      A

;; AUTHORITY SECTION:
.                       1780    IN      SOA     a.root-servers.net. nstld.verisign-grs.com. 2012061700 1800 900 604800 86400

;; Query time: 24 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Jun 17 18:05:10 2012
;; MSG SIZE  rcvd: 109

как вы можете видеть, запрос на этот несуществующий домен notexisting.fake. возвращает нас

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 28725

Если мы запрашиваем для google.com, dig A google.com.

[email protected]_Gate:~$ dig A google.com.

; <<>> DiG 9.7.3 <<>> A google.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13223
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             300     IN      A       74.125.132.138
google.com.             300     IN      A       74.125.132.139
google.com.             300     IN      A       74.125.132.101
google.com.             300     IN      A       74.125.132.113
google.com.             300     IN      A       74.125.132.100
google.com.             300     IN      A       74.125.132.102

;; Query time: 29 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Jun 17 18:05:20 2012
;; MSG SIZE  rcvd: 124

наш запрос возвращает нам правильный NOERROR

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13223
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0

и возвращает нам ip-адрес, найденный для записи A

;; ANSWER SECTION:
google.com.             300     IN      A       74.125.132.138
google.com.             300     IN      A       74.125.132.139
google.com.             300     IN      A       74.125.132.101
google.com.             300     IN      A       74.125.132.113
google.com.             300     IN      A       74.125.132.100
google.com.             300     IN      A       74.125.132.102

Итак, если ваш запрос для фальшивого домена возвращает IP-адрес, то вы знаете, что проблема связана с вашим DNS, и ваш isp, без сомнения, перенаправляет каждый несуществующий запрос на собственный сервер, возится с вашим "мой сайт вверх" стратегии ", так как вы получите статус 200 OK, но это будет эффективно от самозванца.

Если это так, вы можете:

  • измените свой DNS-сервер: используйте Google Public DNS (8.8.8.8 и 8.8.4.4) или opendns (208.67.222.222 и 208.67.220.220)
  • умолять/жаловаться на ваш isp, чтобы они могли изменить эту политику или предоставить вам собственный DNS-сервер без перенаправления.
  • запустите свой собственный DNS-сервер для личного поиска, если он разрешен в вашей сети.