HTTP要求を実行するときにcurlの--resolve
オプションを使用して指定されたIPアドレスに接続しようとしていますが、curlはローカルDNSキャッシュ/リゾルバーによって取得されたIPアドレスに戻り続けます。
コマンド:
curl -s -S -I -H "Host: example.com" --resolve example.com:80:1.1.1.1 --verbose http://example.com/
(example.com
は私のドメイン名に置き換えられ、1.1.1.1
は目的の宛先IPアドレスに置き換えられます)
結果:
* Added example.com:80:1.1.1.1 to DNS cache
* Hostname was NOT found in DNS cache
* Trying 2.2.2.2...
* Connected to example.com (2.2.2.2) port 80 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.35.0
> Accept: */*
> Host: example.com
(2.2.2.2
は、ドメイン名のローカルDNSリゾルバーにキャッシュされたIPアドレスに置き換えられます)
したがって、curlは1.1.1.1
のDNSキャッシュにexample.com
を追加しようとしますが、何らかの理由で失敗し、元のIPアドレスに戻ります。
この問題を解決する方法や、さらにトラブルシューティングして、なぜ機能しないのかを調べる方法についてのアイデアはありますか?
他のドメイン名でこれを試してみたところ、ドメイン名が--resolve
オプションとURLで一致していないことが原因であることがわかりました(一方はwww
でしたが、他方は一致しませんでした)。ユーザーエラー!
間違った:
curl -s -S -I -H "Host: example.com" --resolve example.com:80:1.1.1.1 --verbose http://www.example.com/
正しい:
curl -s -S -I -H "Host: example.com" --resolve example.com:80:1.1.1.1 --verbose http://example.com/