Допустим, сайт сбалансирован по нагрузке между несколькими серверами. Я хочу запустить команду, чтобы проверить, работает ли она, например curl DOMAIN.TLD
. Итак, чтобы изолировать каждый IP-адрес, я указываю IP-адрес вручную. Но многие веб - сайты могут быть размещены на сервере, так что я по- прежнему обеспечивает заголовок узла, например: curl IP_ADDRESS -H 'Host: DOMAIN.TLD'
. В моем понимании эти две команды создают один и тот же HTTP-запрос. Единственное отличие состоит в том, что в последнем я вынимаю часть поиска DNS из cURL и делаю это вручную (пожалуйста, исправьте меня, если я ошибаюсь).
Пока все хорошо. Но теперь я хочу сделать то же самое для URL HTTPS. Опять же, я мог бы проверить это так curl https://DOMAIN.TLD
. Но я хочу указать IP вручную, поэтому я запускаю curl https://IP_ADDRESS -H 'Host: DOMAIN.TLD'
. Теперь я получаю ошибку cURL:
curl: (51) SSL: certificate subject name 'DOMAIN.TLD' does not match target host name 'IP_ADDRESS'.
Конечно, я могу обойти это, сказав cURL, чтобы он не заботился о сертификате (опция -k), но он не идеален.
Есть ли способ изолировать подключаемый IP-адрес от хоста, сертифицированного по SSL?
Host
заголовку, поэтому--resolve
это правильный способ закрепления IP-адреса.Ответы:
Думаю, я нашел решение, изучив руководство по cURL:
из CURLOPT_RESOLVE объяснил
источник
curl -v
и вы можете видеть, что curl добавляет опцию разрешения для временного кэша DNS и добавляет, использует IP-адрес, который вы указали.IP_ADDRESS
, он будет игнорировать эту опцию.Вы можете изменить в / etc / hosts, чтобы сервер думал, что домен расположен по определенному IP.
Это синтаксис:
Это заставит cURL использовать IP-адрес, который вы хотите, без взлома SSL-сертификата.
источник
Вот
man
запись для наиболее одобренного в настоящее время ответа, поскольку в него включена только ссылка на программный компонент:Но из-за данного ограничения («Это означает, что вам нужно несколько записей, если вы хотите предоставить адрес для одного и того же хоста, но разных портов».), Я бы рассмотрел другой, более новый вариант, который может переводить оба одновременно:
источник
Если вы используете curl в Windows, используйте двойные кавычки
Вы можете пропустить схему / протокол заранее, но вы не можете пропустить номер порта в строке --resolve.
источник