curl ဖြင့် HTTP proxy ကို စမ်းသပ်ခြင်း
စက်၏ အလုံးစုံ proxy ကို မပြောင်းဘဲ အချိန်ကန့်သတ်ထားသော curl စမ်းသပ်မှုဖြင့် proxy ချိတ်ဆက်မှု၊ HTTPS tunnel၊ တုံ့ပြန်မှုအခြေအနေနှင့် bypass စည်းမျဉ်းများကို စစ်ဆေးပါ။
127.0.0.1:8080 အစား သင့်ဝန်ဆောင်မှု သို့မဟုတ် HTTP proxy စာရင်းမှ endpoint ကို ထည့်ပြီး အန္တရာယ်မရှိသော HTTPS ဦးတည်ရာသို့ ဤအမိန့်ကို လုပ်ဆောင်ပါ။
curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --verbose https://example.com/Loopback လိပ်စာသည် သင့်ကိုယ်ပိုင်ကွန်ပျူတာပေါ်ရှိ listener ကို ဆိုလိုသည်။ ဤအမိန့်က ၎င်းကို တိတိကျကျရွေးချယ်ပြီး ယခုခေါ်ဆိုမှုအတွက် curl ၏ bypass စာရင်းကို ရှင်းကာ ချိတ်ဆက်မှုတည်ဆောက်ရန် ငါးစက္ကန့်နှင့် စုစုပေါင်း ဆယ့်ငါးစက္ကန့် ခွင့်ပြုသည်။ Browser နှင့် စနစ်၏ proxy သတ်မှတ်ချက်များကို မပြောင်းပါ။
Shell က curl ကို အခြားပရိုဂရမ်၏ အမည်လွှဲအဖြစ် သတ်မှတ်ထားလျှင် curl ၏ တကယ့် executable ကို သုံးပါ။ curl --version က build ကို ခွဲခြားပေးသည်။ Listener ကိုယ်တိုင် TLS လိုအပ်ပါက ၎င်း၏ မှတ်တမ်းတွင် ဖော်ပြထားသော proxy URL scheme ကို သုံးပါ။
အောင်မြင်မှုအမှတ်အသားတစ်ခုမဟုတ်ဘဲ ရလဒ်လေးခုကို ဖတ်ပါ
- ရွေးထားသော proxy သို့ ချိတ်ဆက်ပြီး: လိပ်စာနှင့် port ကို ရောက်ရှိနိုင်သည်။
- CONNECT ကို လက်ခံပြီး: proxy က HTTPS ဦးတည်ရာသို့ tunnel ဖွင့်ထားသည်။
- ဦးတည်ရာ certificate ကို စစ်ဆေးပြီး: မျှော်လင့်ထားသော ယုံကြည်မှုစစ်ဆေးချက်များနှင့် TLS ပြီးစီးသည်။
- ဦးတည်ရာ၏ တုံ့ပြန်မှုကို ရရှိပြီး: application လိုအပ်သည့် ရလဒ်အတွက် အခြေအနေနှင့် အကြောင်းအရာကို စစ်ပါ။
အလုပ်လုပ်သော tunnel နောက်တွင်လည်း ဦးတည်ရာမှ 403 သို့မဟုတ် 429 လာနိုင်သည်။ HTTP error response ကို ရပြီးနောက် curl က အောင်မြင်စွာ ထွက်နိုင်သေးသောကြောင့် တုံ့ပြန်မှုအခြေအနေနှင့် curl ၏ error result နှစ်ခုလုံး မှတ်တမ်းတင်ပါ။ TCP connection သို့မဟုတ် CONNECT အောင်မြင်မှုတစ်ခုတည်း မလုံလောက်ပါ။
အကြိမ်ကြိမ်နှိုင်းယှဉ်ရန် ကျစ်လျစ်သော ရလဒ်
Unix နှင့် ဆင်တူသည့် shell တွင် response body ကို စွန့်ပစ်ပြီး tunnel အခြေအနေ၊ ဦးတည်ရာအခြေအနေ၊ ချိတ်ဆက်မှု၏ အခြားတစ်ဖက်နှင့် ကြာချိန်ကို ထုတ်ပါ။
curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --silent --show-error --output /dev/null --write-out 'http=%{http_code} connect=%{http_connect} peer=%{remote_ip} total=%{time_total}\n' https://example.com/http_connect က tunnel response ကို ဖော်ပြပြီး http_code က နောက်ဆုံး HTTP response ကို ဖော်ပြသည်။ remote_ip သည် curl ချိတ်ဆက်မှု၏ အခြားတစ်ဖက်ဖြစ်ပြီး proxy ၏ အထွက်လိပ်စာကို လွတ်လပ်စွာ တိုင်းတာထားခြင်း မဟုတ်ပါ။ အခြားစနစ်တွင် /dev/null ကို အစားထိုးပါ သို့မဟုတ် response body ကို ထားရှိပါ။
စမ်းသပ်မှု မအောင်မြင်လျှင် ချိတ်ဆက်မှုတည်ဆောက်ခြင်း သို့မဟုတ် လွှဲပြောင်းခြင်း၏ ပျက်ကွက်သော အဆင့်ကို ရှာပါ။ ထိုလမ်းကြောင်းကို ခွင့်ပြုထားသည့်နေရာတွင် ဦးတည်ရာတူကို တိုက်ရိုက်ချိတ်ဆက်ခြင်းနှင့် နှိုင်းယှဉ်ပါ။
curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/--noproxy '*' သည် proxy များကို ကျော်သွားသည်။ လမ်းကြောင်းနှစ်ခုလုံးတွင် certificate verification ပျက်ကွက်ခြင်းက တူညီသော ယုံကြည်မှုဆိုင်ရာပြဿနာကို ညွှန်ပြပြီး တိုက်ရိုက်ချိတ်ဆက်မှုအောင်မြင်သော်လည်း CONNECT ငြင်းပယ်ခံရခြင်းက proxy authentication သို့မဟုတ် policy ကို ညွှန်ပြသည်။ အသေးစိတ် output ကို မမျှဝေမီ စစ်ဆေးပါ၊ အထောက်အထားဖော်ထုတ်နိုင်သော အချက်အလက် ပါဝင်နိုင်သည်။
Endpoint၊ ဦးတည်ရာနှင့် အချိန်မှတ်တမ်းကို ရလဒ်နှင့်အတူ သိမ်းပါ။ ဤရလဒ်က ထို request အတွက် ဘာအလုပ်လုပ်ခဲ့သည်ကို ဖော်ပြသည်။ အနာဂတ်ရရှိနိုင်မှု၊ ကိုယ်ရေးလုံခြုံမှုနှင့် load အောက်စွမ်းဆောင်ရည်အတွက် သီးခြားအထောက်အထား လိုသည်။