libcurl melampirkan konfigurasi proxy ke easy handle yang melakukan transfer. Setel alamat perantara pada handle tersebut, sambil membiarkan CURLOPT_URL sebagai URL tujuan.

Fragmen berikut mengasumsikan libcurl telah diinisialisasi dan handle adalah easy handle yang valid:

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));

Jaga buffer kesalahan tetap hidup selama handle merujuknya. Sebelum meninggalkan cakupannya, bersihkan handle atau ganti atau hapus penunjuk CURLOPT_ERRORBUFFER-nya. Nama host proxy adalah placeholder; kandidat tanpa autentikasi dari daftar proxy HTTP dapat menyediakan alamat untuk uji situs publik ini. Gunakan skema dan portnya yang sebenarnya, dan periksa apakah ia mengizinkan terowongan HTTPS.

Tujuan HTTPS dapat menggunakan proxy HTTP. libcurl menangani terowongan untuk transfer HTTPS tersebut. http:// dalam opsi proxy menjelaskan koneksi ke perantara. Ubah menjadi https:// hanya untuk titik akhir proxy yang benar-benar menerima TLS dan build libcurl yang mendukungnya.

Buat rute efektif menjadi disengaja

Opsi proxy eksplisit menimpa pengaturan lingkungan proxy yang sesuai. Lewat adalah keputusan terpisah: no_proxy yang diwarisi masih dapat mengecualikan tujuan. Jika handle ini harus menggunakan proxy yang dipilih untuk setiap tujuan yang diberikan, konfigurasikan CURLOPT_NOPROXY sebagai string kosong sebagai bagian dari kebijakan tersebut.

Sebaliknya, menyetel CURLOPT_PROXY ke string kosong secara eksplisit menonaktifkan penggunaan proxy. Menyetelnya ke NULL menghapus penetapan eksplisit dan kembali mengizinkan perilaku berbasis lingkungan. Kedua nilai itu melayani tujuan yang berbeda.

Header khusus target seperti Content-Type: text/xml tidak memilih proxy. Tambahkan hanya ketika isi permintaan sebenarnya dan API tujuan membutuhkan jenis media tersebut.

Baca juga hasil HTTP

curl_easy_perform yang berhasil tidak berarti situs web mengembalikan status HTTP yang berhasil. Baca CURLINFO_RESPONSE_CODE dan terapkan penanganan status aplikasi. Balasan CONNECT proxy memiliki nilainya sendiri, CURLINFO_HTTP_CONNECTCODE; penolakan terowongan mendahului setiap respons situs web.

CURLOPT_FAILONERROR dapat memperlakukan banyak kesalahan HTTP sebagai kegagalan, tetapi dokumentasinya menyebutkan pengecualian autentikasi. Jaga tantangan 407 proxy terpisah dari status tujuan.

Artikel terkait