強制 PHP 的 cURL 解析網域到特定 IP 位址

前言

若你使用 PHP 的 cURL 時,在某些很極端的情況下,你可能會希望跳過 DNS 解析,強制指定網域解析到特定 IP 位址上,這時候你就可以參考這篇文章了!

操作方式

你可以使用這個參數來強迫 cURL 解析目標網域到特定的 IP 位址上:

<?php
    # 禁止 cURL 使用 Global Cache
    curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false);
    # 強制 cURL 將網域解析到特定 IP 位址上
    # 格式為:Domain:Port:IPAddr
    curl_setopt($curl, CURLOPT_RESOLVE, array("www.cre0809.com:443:104.16.16.16"));
?>

放在一個 cURL 陣列可能是長這樣的:

<?php

    $curl = curl_init();

    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://www.cre0809.com/cdn-cgi/trace',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_NONE,
      CURLOPT_CUSTOMREQUEST => 'GET',
      CURLOPT_HTTPHEADER => array(),
      CURLOPT_DNS_USE_GLOBAL_CACHE => false,
      CURLOPT_RESOLVE => array("www.cre0809.com:443:104.16.16.16")
    ));

    $response = curl_exec($curl);
    curl_close($curl);
    echo $response;
?>

這樣就可以強制 cURL 解析到特定 IP 位址上囉。