2014-07-03 2 views
0

J'utilise le HttpClient dans theSystem.Net.Http mais je vais avoir des problèmes face à cookies. Je suis venu à travers d'autres messages expliquant comment configurer des cookies avec HttpClient. créer un CookieContainer pour le HttpClientHandler.CookieHandler et utiliser ce conteneur pour les cookies. Lorsque initialisé, sa valeur est évidemment 0 et après avoir fait le PostAsync, le CookieContainer contient un cookie. Je parcours une boucle foreach pour imprimer les valeurs et j'obtiens la valeur du cookie. Tout semble fonctionner comme il se doit. Le problème est Le problème est que même si il semble que j'accepte les cookies, le site me redirige vers une page m'informant que je n'accepte pas les cookies. J'ai vérifié avec un navigateur (le faisant n'accepte pas des biscuits) et c'est le résultat exact que j'obtiens avec mon HttpClient.Cookies sur Windows Phone 8.1 en utilisant HttpClient

La fonction globale de mon code est de donner des valeurs pour un login et essayer de les afficher. La connexion semble fonctionner comme prévu bien qu'elle me redirige en me disant que je n'accepte pas les cookies - même si mon CookieContainer contient un cookie. Je ne suis pas sûr où cela va mal, mais il semble que le site ne puisse pas voir que j'accepte les cookies. J'ai essayé le réglage httpClientHandler.UseCookies = true; mais sans aucune différence. Le site Web auquel j'essaie d'accéder est le système de lecture des notes de mon université et je n'ai accès à aucun code.

Mon code est illustré ci-dessous:

{ 
    var httpClientHandler = new HttpClientHandler(); 


    //Creating cookiecontainer and printing Count for debug purpose 
    var cookieContainer = new CookieContainer(); 
    Debug.WriteLine("Cookies " + cookieContainer.Count); 

    httpClientHandler.CookieContainer = cookieContainer; 

    var httpClient = new HttpClient(httpClientHandler); 

    HttpResponseMessage response = await httpClient.PostAsync(url, new FormUrlEncodedContent(values)); 

    Debug.WriteLine("Response code" + response.StatusCode); 
    Debug.WriteLine("Response: " + response.IsSuccessStatusCode); 
    response.EnsureSuccessStatusCode(); 

    string content = await response.Content.ReadAsStringAsync(); 

    //Print amount of cookies after PostAsync - Should contain cookie now 
    Debug.WriteLine("Cookies " + cookieContainer.Count); 

//Printing the values of the added cookies 
    foreach (Cookie cookie in cookieContainer.GetCookies(new Uri(url))) 
    { 
     Debug.WriteLine("Cookie contains: " + cookie.Value.ToString()); 
    } 
} 

Ceci est mon premier Windows Phone App et il est la première fois en utilisant la HttpClient mais je l'ai utilisé quelques jours en train de lire à ce sujet afin espère que la réponse est non à évident. Merci beaucoup - votre aide est très appréciée.

Répondre

0

je résolu le problème en suivant le site avec le chrome. Je compris que la page de connexion me donne 2 biscuits quand je suis allé à la page et 1 cookie lorsque je me suis connecté dans le scénario peut être décrit comme celui-ci

  • Get loginPage -. 2 biscuits
  • Poster LoginPage - 1 cookie

Le problème était que j'ai commencé par faire un httpClient.PostAsync pour la connexion. Lors de la connexion, il me manquait les 2 premiers cookies.

Je l'ai résolu en faisant une httpClient.GetAsync avant le poste, je puis obtenu les totalt 3 cookies était nécessaire.

HttpResponseMessage responseGet = await httpClient.GetAsync(User.School.Url); 
HttpResponseMessage responsePost = await httpClient.PostAsync(User.School.Url, new FormUrlEncodedContent(values)); 

Le problème a probablement été causé par mon manque de connaissances sur les cookies. Si la réponse du site Web indique que vous avez manqué des cookies, alors vous l'êtes probablement, assurez-vous de suivre TOUT le trafic correctement. J'espère que cela peut être utile à quelqu'un d'autre :)

Questions connexes