На cURL --help:
--resolve HOST: PORT : ADDRESS Принудительное преобразование : PORT в АДРЕС
(обходит файл hosts)
пример использования:
http --resolve "www.foo.com:127.0.0.1" GET www.foo.com/whatever
ИЛИ
http --resolve "www.foo.com:8080:127.0.0.1" GET www.foo.com:8080/whatever
Я думаю, вы можете добиться того же, явно установив заголовок Host
:
http 127.0.0.1/whatever Host:www.foo.com
Вышеупомянутый трюк не работает для сайтов HTTPS. Нам нужен вариант полного разрешения, аналогичный curl.
Я использую httpie, чтобы проверить правильность настройки циклического перебора DNS. +1 за функцию
Просто любопытно ... Это было открыто уже больше года (с тех пор, как оно было повторно открыто) ... есть ли шанс, что на него посмотрят? Кажется, это полезная функция.
Базовое программное обеспечение, которое использует HTTPie, не позволяет людям указывать свои собственные IP-адреса для определенного хоста. Вряд ли его туда добавят. Итак, @ aztlan2k , вряд ли над этим работают. Извините. : /
Привет! Я отправил код и буду благодарен за любые комментарии.
Просто повторно отправлено через другой PR. Не могли бы вы проверить?
Есть ли шанс объединить это? @jakubroztocil
Было бы здорово подготовить перенос сайта и избежать проблем!
Этого можно добиться с помощью dig +short <host> A
. Это DNS, а не HTTP
dig
используется для запроса DNS, предлагаемый --resove
используется для принудительного разрешения адреса во время HTTP-выборки (вероятно, до значения, которое DNS-сервер еще не имеет, но будет иметь в будущее, после того, как это тестирование будет сделано).
Это скорее альтернатива редактированию /etc/hosts
чем использованию dig
(или drill
или аналогичного).
Если кто-то не понимает, зачем это нужно «для HTTPS», это, в частности, когда TLS SNI (указание имени сервера) используется вместо заголовка HTTP Host для устранения неоднозначности соединений (например, маршрутизация L7 на основе имени хоста в обратных прокси-серверах, или «виртуальный сервер» в целом), что очень часто.
В этом контексте предварительного разрешения IP-адреса недостаточно, поскольку он не будет представлять собой имя виртуального сервера, ожидаемое фактическим сервером.
Если эквивалент --resolve
нежелателен по какой-либо причине, принудительное использование значения SNI (например, --sni
) будет приемлемой альтернативой IMO, поскольку мы уже можем сделать эквивалент для простого HTTP (т.е. установить значение заголовка Host явно).
Это также может быть полезно для абсолютных перенаправлений (которые включают полный URL-адрес с именем хоста)
Самый полезный комментарий
Вышеупомянутый трюк не работает для сайтов HTTPS. Нам нужен вариант полного разрешения, аналогичный curl.