UserInfo trong URL proxy không phải là WebProxy.Credentials
Trích xuất và giải mã thông tin người dùng từ URI proxy HTTP trước khi tạo NetworkCredential.
Hàm khởi tạo URI của WebProxy chỉ chọn một điểm cuối; nó không điền Credentials từ thông tin người dùng của URI đó. Với URL proxy HTTP đã được ứng dụng xác thực:
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 là URL proxy được cung cấp, không phải URL của trang web. Uri phân tích authority, còn UriBuilder loại bỏ thông tin người dùng khỏi điểm cuối được lưu trong WebProxy.
Tách tại dấu hai chấm nguyên văn đầu tiên trước khi giải mã các thành phần. Cách này giữ lại dấu hai chấm đã mã hóa bên trong tên người dùng và giữ các dấu hai chấm bổ sung của mật khẩu trong mật khẩu. Giải mã mỗi thành phần một lần; không mã hóa mật khẩu bằng Base64 thay cho escaping URL.
Cuối cùng, gán proxy cho trình xử lý HTTP dự định trước khi trình xử lý đó bắt đầu gửi yêu cầu. Chỉ tạo đối tượng không làm thay đổi chính sách định tuyến của một máy khách khác.