【php】curl関数でresolveオプションを指定して名前解決を操作する
問題
phpからテスト用のAPIなどにアクセスするときに、DNSでの名前解決を使わないで、こちらで指定したホスト名とIPを指定してアクセスすることはできないでしょうか。
答え
curlには –resolve という名前解決オプションがある。
phpのcurl関数はcurlコマンドのラッパー。
phpのcurl関数でも、オプションを指定して、curlコマンドの –resolveオプションと同じように、ホスト名とIPアドレスを指定してリクエストを送ることができる。
以下のように設定すれば、curl()通信時に、指定したホスト名のとき、DNSに問い合わせたりしないで、指定したIPアドレスにアクセスできる。
curl_setopt($ch, CURLOPT_RESOLVE, array('ホスト名:ポート番号:宛先のIPアドレス'));
curl_setopt($ch, CURLOPT_RESOLVE, array( 'ホスト名:ポート番号:宛先のIPアドレス', 'ホスト名:ポート番号:宛先のIPアドレス', 'ホスト名:ポート番号:宛先のIPアドレス' ));
使用例
php
<?php $data = []; $ch = curl_init(); curl_setopt($ch, CURLOPT_RESOLVE, ['api.example.com:80:127.0.0.1']); curl_setopt($ch, CURLOPT_PORT, 80); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_URL, 'http://api.example.com/api/test/123'); $response = curl_exec($ch); var_dump($response);
実行結果
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> <hr> <address>Apache/2.4.18 (Ubuntu) Server at api.example.com Port 80</address> </body></html>
コメント