ဝဘ်ဆိုက်ကို curl_init() တွင်ထားပြီး ကြားခံကို ထို handle တွင် သတ်မှတ်ပါ။ PHP တွင် cURL extension လိုသည်။ Terminal မှ curl program အလုပ်လုပ်ခြင်းက extension ရှိကြောင်း မသက်သေပြပါ။

<?php
$ch = curl_init('https://example.com/');
curl_setopt_array($ch, [
    CURLOPT_PROXY => 'http://203.0.113.10:8080',
    CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
    CURLOPT_NOPROXY => '',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT => 15,
]);

$body = curl_exec($ch);
if ($body === false) {
    throw new RuntimeException(curl_error($ch), curl_errno($ch));
}

echo curl_getinfo($ch, CURLINFO_RESPONSE_CODE), PHP_EOL;
echo $body;

စာတမ်း IP နှင့် port ကို သင့် HTTP proxy သို့မဟုတ် HTTP proxy စာရင်းမှ မှတ်တမ်းဖြင့် အစားထိုးပါ။ CURLOPT_NOPROXY သည် ဤစမ်းသပ်မှုအတွက် bypass စည်းမျဉ်းများကို ရှင်းသည်။ CURLOPT_RETURNTRANSFER သည် body ကို browser သို့မပို့ဘဲ ပြန်ပေးသည်။ Connection အချိန်ကန့်သတ်ချက်က တည်ဆောက်မှုကို၊ စုစုပေါင်းအချိန်ကန့်သတ်ချက်က cURL လုပ်ဆောင်မှုကို ကန့်သတ်သည်။

SOCKS5 endpoint အတွက် HTTP proxy options ကို curl_exec() မတိုင်မီ အစားထိုးပါ။

curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);

CURLPROXY_SOCKS5_HOSTNAME သည် ဦးတည်ရာ DNS ကို SOCKS server ထံ လွှဲအပ်သည်။ ပြောထားသော protocol ကို သုံးပါ။ Port 1080 တစ်ခုတည်းဖြင့် မသိနိုင်ပါ။ Proxy ရွေးချယ်မှုနှစ်ခုစလုံးအတွက် ဝဘ်ဆိုက် certificate စစ်ဆေးမှုကို ပိတ်ရန်မလိုပါ။

$body === false ကို တိကျသောနှိုင်းယှဉ်မှုဖြင့် စစ်ပါ။ Body ဗလာဖြစ်ခြင်းက အောင်မြင်သောပို့ဆောင်မှု ဖြစ်နိုင်ပြီး ဝဘ်ဆိုက်အဖြေတစ်ခုမျှ မရှိခင် tunnel အမှားဖြစ်နိုင်သည်။ အပြန်အလှန်အားဖြင့် body အလွတ်မဟုတ်သော်လည်း 403၊ 404 သို့မဟုတ် 429 ပါနိုင်သည်။ ပြီးဆုံးသော request က သင့်အလုပ်ကို ဖြည့်ဆည်းသလား ဆုံးဖြတ်ရန် CURLINFO_RESPONSE_CODE ကို cURL အမှားရလဒ်နှင့်တွဲဖတ်ပါ။

ဆက်စပ်ဆောင်းပါးများ