開発環境
投稿日 : 2025年4月30日

cURLで名前解決できないときの対処法【ローカル開発環境】

cURLで名前解決できないときの対処法【ローカル開発環境】の画像

梅子CMSのHTML生成機能を作っていたとき、「ローカル環境で、プログラムを使って自分自身のドメインにアクセス」したらcURLのエラーになりました。

cURL error 6: Could not resolve host: xxx.local (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://xxx.local/

Laravelのhttp::get($url)でホスト名の解決ができなかったようです。

解決方法 – hostsに仮想ホスト名を追記する

hostsファイルに仮想ホストを追加します。場所は「/etc/hosts」でした。

127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

127.0.1.1       xxx.local

書いて保存することで、cURLの「ホスト名が解決できない」エラーがなくなりました。

原因 – DNSサーバーに情報がない

「ホスト名が解決できない」は「ホスト名をIPアドレスに変換できない」問題です。

cURLする先が公開されている場所なら問題なく動作します。が、今回は「公開していないローカル開発環境にcURLでアクセス」なので、一般のDNSサーバーにはありません。自分だけで使っているものですから。

自分だけが使っている環境のではDNSサーバーに解決依頼するのではなく、自分のhostsファイルで解決することになります。

hostsファイルは名前解決するときに最優先で参照するものですので、ここに書いてあれば大丈夫です。

file_get_contentsで取得できない場合でも同じようなエラーが起きるかと思います(試していません)。

ちょっと使うだけならオプションで実行するのも有効

一時的にcURLをするなら、コマンドオプション「–resolve」をつければこの名前解決問題を回避できるようです。

--resolve ホスト名:ポート番号:IPアドレス アクセスするURL
--resolve xxx.local:80:127.0.0.1 http://xxx.com/test

動作環境

uname -a
Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux

nginx -v
nginx version: nginx/1.18.0

php -v
PHP 8.4.4 (cli) (built: Mar  9 2025 16:57:34) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.4, Copyright (c) Zend Technologies
    with Zend OPcache v8.4.4, Copyright (c), by Zend Technologies
    with Xdebug v3.4.1, Copyright (c) 2002-2025, by Derick Rethans
  • ローカルの開発環境
  • Nginxの仮想ホスト

を使用していました。

参考

PR

※本サイトはアフィリエイトプログラムを利用して商品を紹介しています。