Вы пишите: "Игнорируя запись в hosts-файле". Имеется ввиду, что в hosts прописано что-то вроде:
127.0.0.1 <domen>
При условии PHP 8.1 и libcurl 7.62+ есть DNS-over-HTTPS (DoH). Погуглите, ну или почитайте тут - https://ru.wikipedia.org/wiki/DNS_%D0%BF%D0%BE%D0%B2%D0%B5%D1%80%D1%85_HTTPS
Например, пишем в hosts:
127.0.0.1 2ip.ru
Пишем код:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://2ip.ru");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'User-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36h'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (!($res = curl_exec($ch))) {
echo curl_error($ch);
} else {
echo $res;
}
curl_close($ch);
Получаем по 127.0.0.1 свою ошибку (ну в моем случае, так как никто 443 на 127.0.0.1 не пытается слушать):
OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 2ip.ru:443
Добавляем публичный DNS сервер от OpenDNS:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://2ip.ru");
// Получаем DNS по HTTPS от публичного сервиса OpenDNS, в обход hosts:
curl_setopt($ch, CURLOPT_DOH_URL, 'https://doh.opendns.com/dns-query');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'User-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36h'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if (!($res = curl_exec($ch))) {
echo curl_error($ch);
} else {
echo $res;
}
curl_close($ch);
Сработало, получили свой IP от 2ip.ru:
...
<br>
<br>
IP: 95.31.XXX.XXX<br>
</center>
</div>
...