UserInfo dalam URL proksi bukanlah WebProxy.Credentials
Ekstrak dan nyahkod maklumat pengguna daripada URI proksi HTTP sebelum mencipta NetworkCredential.
Pembina URI WebProxy hanya memilih titik akhir; ia tidak mengisi Credentials daripada maklumat pengguna URI itu. Untuk URL proksi HTTP yang disahkan oleh aplikasi:
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 ialah URL proksi yang dibekalkan, bukan URL laman web. Uri menghurai authority-nya, manakala UriBuilder mengalih keluar maklumat pengguna daripada titik akhir yang disimpan dalam WebProxy.
Bahagikan pada titik bertindih literal pertama sebelum menyahkod komponen. Ini mengekalkan titik bertindih yang dikodkan dalam nama pengguna dan menyimpan titik bertindih tambahan kata laluan dalam kata laluan. Nyahkod setiap komponen sekali sahaja; jangan kodkan kata laluan dalam Base64 sebagai ganti escaping URL.
Akhir sekali, tetapkan proxy kepada pengendali HTTP yang dimaksudkan sebelum pengendali itu memulakan permintaan. Membina objek itu sahaja tidak mengubah dasar penghalaan klien lain.