Το UserInfo ενός URL διαμεσολαβητή δεν είναι WebProxy.Credentials
Εξαγάγετε και αποκωδικοποιήστε τα στοιχεία χρήστη από ένα URI διαμεσολαβητή HTTP πριν δημιουργήσετε το NetworkCredential.
Ο κατασκευαστής URI του WebProxy επιλέγει ένα τελικό σημείο· δεν γεμίζει το Credentials από τα στοιχεία χρήστη αυτού του URI. Για ένα URL διαμεσολαβητή HTTP που επικυρώνει η εφαρμογή:
var uri = new Uri(proxyUrl);
var endpoint = new UriBuilder(uri)
{
UserName = "",
Password = ""
};
var proxy = new System.Net.WebProxy(endpoint.Uri);
if (uri.UserInfo.Length > 0)
{
var parts = uri.UserInfo.Split(new[] { ':' }, 2);
var username = Uri.UnescapeDataString(parts[0]);
var password = parts.Length == 2
? Uri.UnescapeDataString(parts[1])
: "";
proxy.Credentials =
new System.Net.NetworkCredential(username, password);
}
Το proxyUrl είναι το URL διαμεσολαβητή που δόθηκε, όχι το URL του ιστότοπου. Το Uri αναλύει το authority, ενώ το UriBuilder αφαιρεί τα στοιχεία χρήστη από το τελικό σημείο που αποθηκεύεται στο WebProxy.
Χωρίστε στην πρώτη κυριολεκτική άνω κάτω τελεία πριν αποκωδικοποιήσετε τα συστατικά. Έτσι διατηρείται μια κωδικοποιημένη άνω κάτω τελεία μέσα στο όνομα χρήστη και τα επιπλέον άνω κάτω τελείες παραμένουν στον κωδικό πρόσβασης. Αποκωδικοποιήστε κάθε συστατικό μία φορά· μην κωδικοποιείτε τον κωδικό πρόσβασης σε Base64 ως υποκατάστατο του escaping URL.
Τέλος, αναθέστε το proxy στον προβλεπόμενο HTTP handler πριν αυτός ξεκινήσει αιτήματα. Η κατασκευή του αντικειμένου μόνη της δεν αλλάζει την πολιτική δρομολόγησης άλλου πελάτη.