Я пытаюсь выполнить авторизацию на кириллическом домене с помощью WebClient. Авторизация проходит через несколько этапов с переадресацией между нормальным и punicode доменами. Проблема заключается в том, что HttpWebRequest не может хранить файлы cookie в назначенном CookieContaier, если он был установлен доменом punycode. Например, этот код будет вызывать CookieException.CookieContainer не хранит файлы cookie для интернационализированных доменных имен
var cookie = new Cookie("test_cookie", "test_value", "/", ".xn----7sbcca6bi0ak9b0a6f.xn--p1ai");
var container = new CookieContainer().Add(cookie);
Проблема усугубляется тем фактом, что ответ, который устанавливает куки перенаправляет на другую страницу, то есть после того, как WebClient.UploadValues (...) были выполнены нет никакой информации куки в WebClient.ResponseHeaders.
Ниже нормальный процесс авторизации (с помощью браузера)
Method Result Received Type URL RedirectURL Set-Cookie
POST 302 1,18 K text/html http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin/login http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin sess_id=.......; expires=Mon, 06-Jun-2016 07:20:57 GMT; Max-Age=31536000; path=/; domain=.xn----7sbcca6bi0ak9b0a6f.xn--p1ai; httponly
GET 302 722 text/html http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin /admin/orders
GET 200 200,00 K text/html http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin/orders
Есть ли обходной путь?
Может ли кто-нибудь подтвердить, что это ошибка? Может быть, я должен сообщить об этом на https://connect.microsoft.com/VisualStudio/? – Leff
Обновление: 1. Обработка IDN и IRI должна быть включена в конфигурации для воспроизведения описанного выше поведения. 2. Очевидно, что причиной проблемы является внутренний метод 'VerifySetDefaults' класса' System.Net.Cookie'. Я пытаюсь понять, почему, но 'VerifySetDefaults' довольно сложный для меня. – Leff
Обновление: Кажется, что 'VerifySetDefaults' пытается сравнить IDN с его представлением punycode, когда он не выполняется, исключение вызывается. – Leff