প্রক্সি URL-এর UserInfo কোনো WebProxy.Credentials নয়
NetworkCredential তৈরি করার আগে HTTP প্রক্সি URI থেকে ব্যবহারকারীর তথ্য বের করুন এবং ডিকোড করুন।
WebProxy-এর URI কনস্ট্রাক্টর একটি এন্ডপয়েন্ট বেছে নেয়; এটি সেই URI-এর ব্যবহারকারীর তথ্য থেকে Credentials পূরণ করে না। অ্যাপ্লিকেশন-যাচাইকৃত HTTP প্রক্সি URL-এর জন্য:
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-তে সংরক্ষিত এন্ডপয়েন্ট থেকে ব্যবহারকারীর তথ্য সরিয়ে দেয়।
কম্পোনেন্টগুলো ডিকোড করার আগে প্রথম আক্ষরিক কোলনে ভাগ করুন। এতে ব্যবহারকারীর নামের ভেতরের এনকোড করা কোলন সংরক্ষিত থাকে এবং পাসওয়ার্ডের অতিরিক্ত কোলনগুলো পাসওয়ার্ডেই থাকে। প্রতিটি কম্পোনেন্ট একবার ডিকোড করুন; URL এস্কেপিং-এর বিকল্প হিসেবে পাসওয়ার্ড Base64-এনকোড করবেন না।
শেষে, হ্যান্ডলার অনুরোধ শুরু করার আগেই proxy-কে নির্দিষ্ট HTTP হ্যান্ডলারে অ্যাসাইন করুন। শুধু অবজেক্ট তৈরি করলে অন্য ক্লায়েন্টের রাউটিং নীতি বদলায় না।