2015-06-07 5 views
6

Sto tentando di eseguire l'autorizzazione su un dominio cirillico utilizzando WebClient. L'autorizzazione passa attraverso alcune fasi con reindirizzamenti tra domini normali e punicoli. Il problema è che HttpWebRequest non può memorizzare cookie in CookieContaier assegnato se è stato impostato dal dominio punycode. Ad esempio, questo codice genererà CookieException.CookieContainer non memorizza i cookie per i nomi di dominio internazionalizzati

var cookie = new Cookie("test_cookie", "test_value", "/", ".xn----7sbcca6bi0ak9b0a6f.xn--p1ai"); 
var container = new CookieContainer().Add(cookie); 

Il problema è aggravato dal fatto che la risposta che imposta biscotto reindirizza a un'altra pagina, vale a dire dopo WebClient.UploadValues ​​(...) sono stati eseguiti non c'è alcuna informazione cookie nel WebClient.ResponseHeaders.

Di seguito è normale procedura di autorizzazione (utilizzando il browser)

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                                                    

C'è qualche soluzione?

+0

Qualcuno potrebbe confermare che si tratta di un bug? Potrebbe essere necessario segnalarlo a https://connect.microsoft.com/VisualStudio/? – Leff

+0

Aggiornamento: 1. L'elaborazione IDN e IRI deve essere abilitata nella configurazione per riprodurre il comportamento sopra descritto. 2. Ovviamente, il metodo interno 'VerifySetDefaults' della classe' System.Net.Cookie' è la causa del problema. Sto cercando di capire perché, ma 'VerifySetDefaults' è abbastanza sofisticato per me. Aggiornamento – Leff

+0

: Sembra che 'VerifySetDefaults' stia cercando di confrontare un IDN con la sua rappresentazione di punycode, quando fallisce viene lanciata l'eccezione. – Leff

risposta

1

Sei sicuro che l'IDN è il problema?

Il seguente frammento di codice (che è lo stesso come il vostro, ma con la seconda linea contempla per renderlo compilare)

var cookie = new Cookie("test_cookie", "test_value", "/", ".xn----7sbcca6bi0ak9b0a6f.xn--p1ai"); 
var container = new CookieContainer(); 
container.Add(cookie); 

container.GetCookies(new Uri("http://test.xn----7sbcca6bi0ak9b0a6f.xn--p1ai")).Dump(); 

non gettare un CookieException a tutti (eseguito da LINQPad). Il problema potrebbe essere nel nome e/o valore che stai cercando di impostare per il cookie? Qual è il messaggio esatto che ricevi da CookieException?

+0

È sicuramente un problema IDN, perché i normali cookie di dominio sono memorizzati bene. Il tuo snippet di codice genera un'eccezione su .net fw 4.5.1. Quale versione hai usato per testare? – Leff

+0

! [Screenshot] (http://s017.radikal.ru/i433/1506/2f/7c13166ab19f.png) – Leff

+0

In esecuzione 4.0.30319.34014, che è .NET 4.5.1 su Windows 8.1 a 64 bit. –

Problemi correlati