libcurl easy handle-এ একটি স্পষ্ট প্রক্সি বসানো
একটি নির্দিষ্ট প্রক্সির জন্য libcurl easy handle কনফিগার করুন এবং option ত্রুটি, transfer ব্যর্থতা ও HTTP স্ট্যাটাস আলাদা করুন।
libcurl প্রক্সি কনফিগারেশনটি transfer সম্পাদনকারী easy handle-এ সংযুক্ত করে। ওই handle-এ মধ্যস্থতাকারীর ঠিকানা সেট করুন, আর CURLOPT_URL কে গন্তব্য URL হিসেবে রেখে দিন।
নিচের অংশটি ধরে নেয় libcurl শুরু হয়েছে এবং handle একটি বৈধ easy handle:
char error[CURL_ERROR_SIZE] = {0};
CURLcode result;
result = curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, error);
if (result == CURLE_OK)
result = curl_easy_setopt(handle, CURLOPT_URL,
"https://example.com/");
if (result == CURLE_OK)
result = curl_easy_setopt(handle, CURLOPT_PROXY,
"http://proxy.example:8080");
if (result == CURLE_OK)
result = curl_easy_perform(handle);
if (result != CURLE_OK)
fprintf(stderr, "%s\n", error[0] ? error
: curl_easy_strerror(result));
handle যতক্ষণ এটি উল্লেখ করে ততক্ষণ ত্রুটি বাফারটি জীবিত রাখুন। এর পরিসর ছাড়ার আগে handle পরিষ্কার করুন বা এর CURLOPT_ERRORBUFFER পয়েন্টার প্রতিস্থাপন বা মুছে ফেলুন। প্রক্সি হোস্টনামটি একটি প্লেসহোল্ডার; HTTP প্রক্সি তালিকা থেকে একটি অনুমোদনহীন প্রার্থী এই পাবলিক-সাইট পরীক্ষার জন্য ঠিকানা দিতে পারে। এর প্রকৃত স্কিম ও পোর্ট ব্যবহার করুন, এবং এটি HTTPS টানেল অনুমোদন করে কিনা যাচাই করুন।
একটি HTTPS গন্তব্য HTTP প্রক্সি ব্যবহার করতে পারে। ওই HTTPS transfer-এর জন্য libcurl টানেলটি সামলায়। প্রক্সি option-এ থাকা http:// মধ্যস্থতাকারীর সঙ্গে সংযোগ বর্ণনা করে। এটি https://-এ বদলান কেবল এমন প্রক্সি এন্ডপয়েন্টের জন্য যা সত্যিই TLS গ্রহণ করে এবং এমন libcurl build-এর জন্য যা তা সমর্থন করে।
কার্যকর পথটি ইচ্ছাকৃত করুন
একটি স্পষ্ট প্রক্সি option সংশ্লিষ্ট প্রক্সি পরিবেশ সেটিংকে অগ্রাহ্য করে। বাইপাস আলাদা সিদ্ধান্ত: উত্তরাধিকারসূত্রে পাওয়া no_proxy তবুও গন্তব্যটি বাদ দিতে পারে। যদি এই handle-কে দেওয়া প্রতিটি গন্তব্যের জন্য নির্বাচিত প্রক্সিটি ব্যবহার করতে হয়, তবে সেই নীতির অংশ হিসেবে CURLOPT_NOPROXY কে খালি স্ট্রিং হিসেবে কনফিগার করুন।
বিপরীতভাবে, CURLOPT_PROXY কে খালি স্ট্রিং-এ সেট করলে প্রক্সি ব্যবহার স্পষ্টভাবে নিষ্ক্রিয় হয়। এটি NULL-এ সেট করলে স্পষ্ট নিয়োগ মুছে যায় এবং পরিবেশ-ভিত্তিক আচরণ আবার অনুমোদিত হয়। এই দুটি মান ভিন্ন উদ্দেশ্যে কাজ করে।
Content-Type: text/xml-এর মতো লক্ষ্য-নির্দিষ্ট হেডার প্রক্সি নির্বাচন করে না। প্রকৃত অনুরোধ বডি ও গন্তব্য API-এর সেই মিডিয়া ধরন প্রয়োজন হলেই তা যোগ করুন।
HTTP ফলাফলও পড়ুন
সফল curl_easy_perform মানে এই নয় যে ওয়েবসাইটটি সফল HTTP স্ট্যাটাস ফেরত দিয়েছে। CURLINFO_RESPONSE_CODE পড়ুন এবং অ্যাপ্লিকেশনের স্ট্যাটাস হ্যান্ডলিং প্রয়োগ করুন। প্রক্সির CONNECT উত্তরটির নিজস্ব মান আছে, CURLINFO_HTTP_CONNECTCODE; টানেল প্রত্যাখ্যান যেকোনো ওয়েবসাইট প্রতিক্রিয়ার আগে আসে।
CURLOPT_FAILONERROR অনেক HTTP ত্রুটিকে ব্যর্থতা হিসেবে ধরতে পারে, তবে এর ডকুমেন্টেশন প্রমাণীকরণের ব্যতিক্রম উল্লেখ করে। প্রক্সির 407 চ্যালেঞ্জ গন্তব্যের স্ট্যাটাস থেকে আলাদা রাখুন।