curlには名前解決を操作できるオプションがある
問題
サーバー移転のテストで、本来のホスト名 example.com で、移転先サーバー 192.0.2.123 にアクセスしたいです。
いちいち /etc/hosts や “C:\Windows\System32\drivers\etc\hosts” に以下のように追記してテストしないといけないでしょうか。
192.0.2.123 example.com
答え
ブラウザでアクセスして表示確認などする場合は hostsファイルの編集が良いですが、curlコマンドで軽くHTMLやレスポンスを確認するだけの場合は、curlコマンドのオプションで対応可能。
以下のような場合に便利。
- テスト環境のWebサーバに本番のドメインでアクセスしたい
- ドメイン変更で、変更する前に変更後のドメインでテストしたい
curlコマンドで確認する場合は、いちいちhostsを編集しなくても名前解決を操作できるオプションがある。
--resolve <host:port:address>
使い方は、名前解決したいドメイン、ポート、解決結果として使用したいIPを指定するだけ。
例
www.google.com のホスト名で、ローカルの127.0.0.1にアクセスする場合
$ curl -v --resolve www.google.com:80:127.0.0.1 http://www.google.com/ * Added www.google.com:80:127.0.0.1 to DNS cache * Hostname www.google.com was found in DNS cache * Trying 127.0.0.1... * Connected to www.google.com (127.0.0.1) port 80 (#0) > GET / HTTP/1.1 > Host: www.google.com > User-Agent: curl/7.47.0 > Accept: */* > < HTTP/1.1 200 OK < Date: Sat, 18 Jan 2020 04:35:22 GMT < Server: Apache/2.4.18 (Ubuntu) < Vary: Accept-Encoding < Transfer-Encoding: chunked < Content-Type: text/html; charset=UTF-8 < <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head> <style type="text/css"> (以下 ローカルの 127.0.0.1 にアクセスしたときのHTML)
127.0.0.1 に対して、ホスト名 www.google.com でアクセスできた。
* Added www.google.com:80:127.0.0.1 to DNS cache * Hostname www.google.com was found in DNS cache * Trying 127.0.0.1... * Connected to www.google.com (127.0.0.1) port 80 (#0) > GET / HTTP/1.1 > Host: www.google.com
コメント