Το libcurl συνδέει τη διαμόρφωση του proxy με το 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 ή αντικαταστήστε ή σβήστε τον δείκτη CURLOPT_ERRORBUFFER του. Το όνομα κεντρικού υπολογιστή του proxy είναι σύμβολο κράτησης θέσης· ένας μη πιστοποιημένος υποψήφιος από τη λίστα proxy HTTP μπορεί να παρέχει τη διεύθυνση για αυτή τη δοκιμή δημόσιου ιστότοπου. Χρησιμοποιήστε το πραγματικό σχήμα και τη θύρα του και ελέγξτε αν επιτρέπει το τούνελ HTTPS.

Ένας προορισμός HTTPS μπορεί να χρησιμοποιεί proxy HTTP. Το libcurl χειρίζεται το τούνελ για αυτή τη μεταφορά HTTPS. Το http:// στην επιλογή proxy περιγράφει τη σύνδεση με τον μεσολαβητή. Αλλάξτε το σε https:// μόνο για τελικό σημείο proxy που δέχεται πραγματικά TLS και για έκδοση libcurl που το υποστηρίζει.

Κάντε τη διαδρομή που ισχύει συνειδητή

Μια ρητή επιλογή proxy υπερισχύει της αντίστοιχης ρύθμισης περιβάλλοντος proxy. Η παράκαμψη είναι ξεχωριστή απόφαση: ένα κληρονομημένο no_proxy μπορεί ακόμη να αποκλείσει τον προορισμό. Αν αυτό το handle πρέπει να χρησιμοποιεί το επιλεγμένο proxy για κάθε προορισμό που του δίνεται, διαμορφώστε το CURLOPT_NOPROXY ως κενή συμβολοσειρά ως μέρος αυτής της πολιτικής.

Αντίστροφα, η ρύθμιση του CURLOPT_PROXY σε κενή συμβολοσειρά απενεργοποιεί ρητά τη χρήση proxy. Η ρύθμιση σε NULL αφαιρεί τη ρητή ανάθεση και επιτρέπει ξανά τη συμπεριφορά βάσει περιβάλλοντος. Αυτές οι δύο τιμές εξυπηρετούν διαφορετικούς σκοπούς.

Μια κεφαλίδα ειδική για τον στόχο, όπως Content-Type: text/xml, δεν επιλέγει το proxy. Προσθέστε την μόνο όταν το πραγματικό σώμα του αιτήματος και το API προορισμού χρειάζονται αυτόν τον τύπο μέσου.

Διαβάστε και το αποτέλεσμα HTTP

Ένα επιτυχές curl_easy_perform δεν σημαίνει ότι ο ιστότοπος επέστρεψε επιτυχή κατάσταση HTTP. Διαβάστε το CURLINFO_RESPONSE_CODE και εφαρμόστε τον χειρισμό κατάστασης της εφαρμογής. Η απάντηση CONNECT του proxy έχει δική της τιμή, CURLINFO_HTTP_CONNECTCODE· μια απόρριψη τούνελ προηγείται οποιασδήποτε απάντησης του ιστότοπου.

Το CURLOPT_FAILONERROR μπορεί να αντιμετωπίσει πολλά σφάλματα HTTP ως αποτυχίες, αλλά η τεκμηρίωσή του επισημαίνει εξαιρέσεις πιστοποίησης. Κρατήστε την πρόκληση 407 του proxy ξεχωριστή από την κατάσταση του προορισμού.

Σχετικά άρθρα