如果某個域名對應多個ip,即有多台服務器。如何通過curl來訪問指定一台服務器的url信息了。我們知道一般使用curl獲取url信息的代碼如下
$url="https://www.iid.hk/";
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_TIMEOUT,5);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證證書和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$content=curl_exec($ch);
echo $content;
如果想訪問39.99.204.74這個ip服務器的內容了,可以將請求url中域名部分改用ip方式,並加上Host請求頭信息。具體示例代碼如下
$url='https://39.99.204.74/index.php';
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_TIMEOUT,5);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HTTPHEADER,array("Host: www.iid.hk"));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證證書和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$content=curl_exec($ch);
echo $content;
在php5.5以上版本,支持使用 CURLOPT_RESOLVE 來設置主機對應的ip地址。
$url='https://www.iid.hk/index.php';
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_TIMEOUT,5);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_RESOLVE,["www.iid.hk:443:39.99.204.74"]);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證證書和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$content=curl_exec($ch);
echo $content;
其中,CURLOPT_RESOLVE選項,提供自定義地址,指定了主機和端口。包含主機、端口和 ip 地址的字符串,組成 array 的,每個元素以冒號分隔。格式:
array("example.com:80:127.0.0.1")