libcurl easy handle üzerinde açık bir proxy tanımlama
Belirli bir proxy için libcurl easy handle yapılandırın ve seçenek hatalarını, aktarım hatalarını ve HTTP durumunu ayırın.
libcurl, proxy yapılandırmasını aktarımı gerçekleştiren easy handle'a bağlar. Aracının adresini o handle üzerinde ayarlayın, CURLOPT_URL hedef URL olarak kalsın.
Aşağıdaki parça, libcurl'ün başlatıldığını ve handle'in geçerli bir easy handle olduğunu varsayar:
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 ona başvurduğu sürece hata tamponunu canlı tutun. Kapsamından çıkmadan önce handle'ı temizleyin ya da CURLOPT_ERRORBUFFER işaretçisini değiştirin veya temizleyin. Proxy ana bilgisayar adı bir yer tutucudur; HTTP proxy listesinden kimliği doğrulanmamış bir aday, bu genel site testi için adresi sağlayabilir. Gerçek şemasını ve bağlantı noktasını kullanın ve HTTPS tüneline izin verip vermediğini kontrol edin.
Bir HTTPS hedefi HTTP proxy kullanabilir. libcurl o HTTPS aktarımı için tüneli yönetir. Proxy seçeneğindeki http://, aracıya olan bağlantıyı tanımlar. Yalnızca TLS'i gerçekten kabul eden bir proxy uç noktası ve bunu destekleyen bir libcurl derlemesi için https:// olarak değiştirin.
Etkin rotayı bilinçli hale getirin
Açık bir proxy seçeneği, karşılık gelen proxy ortam ayarını geçersiz kılar. Atlama ayrı bir karardır: devralınan no_proxy hedefi yine de dışlayabilir. Bu handle, kendisine verilen her hedef için seçilen proxy'yi kullanmak zorundaysa, CURLOPT_NOPROXY'yi bu politikanın parçası olarak boş bir dizeye ayarlayın.
Tersine, CURLOPT_PROXY'yi boş bir dizeye ayarlamak proxy kullanımını açıkça devre dışı bırakır. NULL olarak ayarlamak açık atamayı kaldırır ve ortam tabanlı davranışa yeniden izin verir. Bu iki değer farklı amaçlara hizmet eder.
Content-Type: text/xml gibi hedefe özgü bir başlık proxy'yi seçmez. Yalnızca gerçek istek gövdesi ve hedef API o medya türüne ihtiyaç duyduğunda ekleyin.
HTTP sonucunu da okuyun
Başarılı bir curl_easy_perform, web sitesinin başarılı bir HTTP durumu döndürdüğü anlamına gelmez. CURLINFO_RESPONSE_CODE'yi okuyun ve uygulamanın durum işlemesini uygulayın. Proxy'nin CONNECT yanıtının kendi değeri vardır, CURLINFO_HTTP_CONNECTCODE; tünel reddi herhangi bir web sitesi yanıtından önce gelir.
CURLOPT_FAILONERROR birçok HTTP hatasını başarısızlık olarak ele alabilir, ancak belgeleri kimlik doğrulama istisnalarına dikkat çeker. Proxy'nin 407 meydan okumasını hedefin durumundan ayrı tutun.