Meletakkan proksi eksplisit pada easy handle libcurl
Konfigurasikan easy handle libcurl untuk proksi tertentu dan pisahkan ralat pilihan, kegagalan pemindahan dan status HTTP.
libcurl melampirkan konfigurasi proksi pada easy handle yang melakukan pemindahan. Tetapkan alamat perantara pada handle itu, sambil membiarkan CURLOPT_URL sebagai URL destinasi.
Fragmen berikut menganggap libcurl telah dimulakan dan handle ialah easy handle yang sah:
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));
Kekalkan penimbal ralat hidup selagi handle merujuknya. Sebelum meninggalkan skopnya, bersihkan handle atau ganti atau kosongkan penunjuk CURLOPT_ERRORBUFFER-nya. Nama hos proksi ialah pemegang tempat; calon tanpa pengesahan daripada senarai proksi HTTP boleh membekalkan alamat untuk ujian tapak awam ini. Gunakan skema dan port sebenarnya, dan semak sama ada ia membenarkan terowong HTTPS.
Destinasi HTTPS boleh menggunakan proksi HTTP. libcurl mengendalikan terowong untuk pemindahan HTTPS itu. http:// dalam pilihan proksi menerangkan sambungan kepada perantara. Tukar kepada https:// hanya untuk titik akhir proksi yang benar-benar menerima TLS dan binaan libcurl yang menyokongnya.
Jadikan laluan berkesan itu disengajakan
Pilihan proksi eksplisit mengatasi tetapan persekitaran proksi yang sepadan. Memintas ialah keputusan berasingan: no_proxy yang diwarisi masih boleh mengecualikan destinasi. Jika handle ini mesti menggunakan proksi yang dipilih untuk setiap destinasi yang diberikan, konfigurasikan CURLOPT_NOPROXY sebagai rentetan kosong sebagai sebahagian daripada dasar itu.
Sebaliknya, menetapkan CURLOPT_PROXY kepada rentetan kosong secara eksplisit melumpuhkan penggunaan proksi. Menetapkannya kepada NULL membuang penetapan eksplisit dan membenarkan semula tingkah laku berasaskan persekitaran. Kedua-dua nilai itu memenuhi tujuan yang berbeza.
Pengepala khusus sasaran seperti Content-Type: text/xml tidak memilih proksi. Tambahkannya hanya apabila badan permintaan sebenar dan API destinasi memerlukan jenis media itu.
Baca juga hasil HTTP
curl_easy_perform yang berjaya tidak bermakna tapak web memulangkan status HTTP yang berjaya. Baca CURLINFO_RESPONSE_CODE dan gunakan pengendalian status aplikasi. Balasan CONNECT proksi mempunyai nilainya sendiri, CURLINFO_HTTP_CONNECTCODE; penolakan terowong mendahului sebarang respons tapak web.
CURLOPT_FAILONERROR boleh menganggap banyak ralat HTTP sebagai kegagalan, tetapi dokumentasinya menyebut pengecualian pengesahan. Kekalkan cabaran 407 proksi berasingan daripada status destinasi.