ដាក់ប្រូកស៊ីច្បាស់លាស់លើ easy handle របស់ libcurl
កំណត់រចនាសម្ព័ន្ធ easy handle របស់ libcurl សម្រាប់ប្រូកស៊ីជាក់លាក់ និងបែងចែកកំហុសជម្រើស ការបរាជ័យផ្ទេរ និងស្ថានភាព HTTP។
libcurl ភ្ជាប់ការកំណត់ប្រូកស៊ីទៅ 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));
រក្សា buffer កំហុសឱ្យនៅរស់ ខណៈ handle យោងទៅវា។ មុនពេលចាកចេញពីដែនរបស់វា សម្អាត handle ឬជំនួស ឬលុប pointer CURLOPT_ERRORBUFFER របស់វា។ ឈ្មោះ host របស់ប្រូកស៊ីគឺជាកន្លែងជំនួស; បេក្ខជនដែលមិនបានផ្ទៀងផ្ទាត់ពី បញ្ជីប្រូកស៊ី HTTP អាចផ្តល់អាសយដ្ឋានសម្រាប់ការសាកល្បងគេហទំព័រសាធារណៈនេះ។ ប្រើ scheme និង port ពិតរបស់វា ហើយពិនិត្យថាតើវាអនុញ្ញាត tunnel HTTPS ឬអត់។
គោលដៅ HTTPS អាចប្រើប្រូកស៊ី HTTP។ libcurl គ្រប់គ្រង tunnel សម្រាប់ការផ្ទេរ HTTPS នោះ។ http:// ក្នុងជម្រើសប្រូកស៊ីពិពណ៌នាអំពីការតភ្ជាប់ទៅអន្តរការី។ ប្តូរវាទៅ https:// តែសម្រាប់ចំណុចបញ្ចប់ប្រូកស៊ីដែលពិតជាទទួល TLS និង build libcurl ដែលគាំទ្រវា។
ធ្វើឱ្យផ្លូវដែលមានប្រសិទ្ធភាពក្លាយជាចេតនា
ជម្រើសប្រូកស៊ីច្បាស់លាស់ជំនួសការកំណត់បរិស្ថានប្រូកស៊ីដែលពាក់ព័ន្ធ។ ការរំលងគឺជាការសម្រេចចិត្តដោយឡែក៖ 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; ការបដិសេធ tunnel កើតឡើងមុនការឆ្លើយតបគេហទំព័រណាមួយ។
CURLOPT_FAILONERROR អាចចាត់ទុកកំហុស HTTP ជាច្រើនជាការបរាជ័យ ប៉ុន្តែឯកសាររបស់វាលើកឡើងពីករណីលើកលែងនៃការផ្ទៀងផ្ទាត់។ រក្សាការប្រកួត 407 របស់ប្រូកស៊ីឱ្យដាច់ពីស្ថានភាពគោលដៅ។