強迫 PHP 的 cURL 使用 IPv6 或 IPv4 解析

前言

現在的網路通常同時支援 IPv6 及 IPv4 協定,但有些時候你使用 PHP 發送每個 cURL 要求時,會希望他強制以 IPv6 或是 IPv4 去要求,這時候你就可以參考這篇文章了!

操作方式

你可以使用這個參數來強迫 cURL 使用你指定的協定:

<?php
    # 預設,可以依照 DNS 來調整使用 IPv6 或 IPv4
    curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_WHATEVER);
    # 強迫使用 IPv6
    curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
    # 強迫使用 IPv4
    curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
?>

放在一個 cURL 陣列可能是長這樣的(範例為強制使用 IPv4):

<?php

    $curl = curl_init();

    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://www.google.com',
      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_IPRESOLVE => CURL_IPRESOLVE_V4
    ));

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

這樣你就可以強制指定使用 IPv6 或 IPv4 囉!