Έλεγχος των κανόνων NO_PROXY του .NET με HttpClient.DefaultProxy.IsBypassed
Καταγράψτε και τον γυμνό τομέα και τη μορφή με αρχική τελεία όταν το HttpClient πρέπει να παρακάμψει τον διακομιστή μεσολάβησης και για τα δύο και μετά ελέγξτε το IsBypassed.
Σύμφωνα με την τεκμηριωμένη πολιτική διακομιστή μεσολάβησης περιβάλλοντος του HttpClient, τα example.internal και .example.internal αντιστοιχίζονται διαφορετικά. Το γυμνό όνομα επιλέγει τον γονικό κεντρικό υπολογιστή· η μορφή με αρχική τελεία επιλέγει τους υποτομείς του.
Αν και τα δύο πρέπει να πηγαίνουν απευθείας, συμπεριλάβετε και τα δύο στο περιβάλλον εκκίνησης:
export no_proxy='example.internal,.example.internal'
Συγχωνεύστε τα με την προβλεπόμενη υπάρχουσα λίστα παράκαμψης. Σε συστήματα όπου τα ονόματα μεταβλητών διακρίνουν πεζά και κεφαλαία, το .NET ελέγχει πρώτα τα ονόματα μεταβλητών μεσολάβησης με πεζά και μετά με κεφαλαία, οπότε ένα παλιό no_proxy μπορεί να υπερισχύσει του NO_PROXY.
Μέσα στην εφαρμογή, ο προεπιλεγμένος επιλογέας μπορεί να ελεγχθεί χωρίς να σταλεί το αίτημα HTTP προς τον προορισμό:
foreach (var host in new[] {
"example.internal", "api.example.internal", "other.internal"
})
{
var uri = new Uri("https://" + host + "/");
Console.WriteLine($"{host}: bypass={HttpClient.DefaultProxy.IsBypassed(uri)}");
}
Το απόσπασμα χρησιμοποιεί τα System και System.Net.Http. Αν η εφαρμογή παρείχε ρητά άλλο IWebProxy, ελέγξτε αντί αυτού τον πραγματικό διακομιστή μεσολάβησης του χειριστή. Ορίστε το επιθυμητό περιβάλλον πριν αρχικοποιηθεί ο προεπιλεγμένος διακομιστής μεσολάβησης.
Αυτοί είναι οι τεκμηριωμένοι κανόνες του .NET. Ένα αποτέλεσμα curl με το ίδιο αλφαριθμητικό δεν αποδεικνύει ότι άλλος πελάτης επέλεξε την ίδια διαδρομή, και μια απόφαση παράκαμψης εξακολουθεί να απαιτεί άμεση δικτυακή προσβασιμότητα.