2 votes

422 erreur retournée dans HttpWebRequest post

Je reçois une erreur "Le serveur distant a renvoyé une erreur : (422) Entité non traitable." lorsque j'essaie de faire un post pour me connecter à un site. Le code que j'utilise ressemble à quelque chose ci-dessous.

    var cookieContainer = new CookieContainer();
    string postData = "authenticity_token=KE%2FfH4B6rQEMZJE2iTvwz3ZvqZfCkrCKvNTmWyN6NAg%3D&user%5Blogin%5D=XXXXX&user%5Bpassword%5D=XXXX&cookie%5Bremember_me%5D=off&commit=Login";
    ServicePointManager.Expect100Continue = false;
    var req = (HttpWebRequest)WebRequest.Create("https://www.assembla.com/user/do_login");
    req.Referer = "https://www.assembla.com/user/login";
    req.CookieContainer = cookieContainer;
    req.ContentType = "application/x-www-form-urlencoded";
    req.Method = "POST";
    byte[] bytes = Encoding.ASCII.GetBytes(postData);
    req.ContentLength = bytes.Length;
    Stream os = req.GetRequestStream();
    os.Write(bytes, 0, bytes.Length); //Poussez-le là-bas
    os.Close();
    WebResponse resp = req.GetResponse();
    var sr = new StreamReader(resp.GetResponseStream());
    string s = sr.ReadToEnd().Trim();

La requête brute fonctionnelle via le navigateur et qui donne une réponse http 302 ressemble à ce qui suit.

POST https://www.assembla.com/user/do_login HTTP/1.1
Host: www.assembla.com
Connection: keep-alive
Referer: https://www.assembla.com/user/login
Content-Length: 179
Cache-Control: max-age=0
Origin: https://www.assembla.com
Content-Type: application/x-www-form-urlencoded
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.237 Safari/534.10
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,sv;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: __utmz=171517232.1296677998.7.6.utmcsr=assembla.com|utmccn=(referral)|utmcmd=referral|utmcct=/spaces/XXXX; assembla_sso=7E4FE565B34B069686F212063603EBF3%3AE6955C612241798CE408896D7AC27131FACE31CBB9D0CA68D9CF12DA463BBC16B74E28BB6C9E9C0141D90AC82EAB0766; _breakout_session=3d5a1d3d8abdc6cf277a6286efce82d5; __utma=171517232.1590472901.1291631853.1296677998.1296682201.8; __utmc=171517232; __utmv=171517232.|1=Logged=false=1,; __utmb=171517232.9.10.1296682201

authenticity_token=or3VG5%2Bon0ySRBZjTn7Ja1OU7LlFLjtXvr4JDth21Bo%3D&user%5Blogin%5D=XXXXX&user%5Bpassword%5D=XXXXX&cookie%5Bremember_me%5D=off&commit=Login

La requête qui donne l'erreur et qui est envoyée en utilisant le code ci-dessus et donne une réponse http 422 ressemble à ceci.

POST https://www.assembla.com/user/do_login HTTP/1.1
Referer: https://www.assembla.com/user/login
Content-Type: application/x-www-form-urlencoded
Host: www.assembla.com
Content-Length: 179
Connection: Keep-Alive

authenticity_token=KE%2FfH4B6rQEMZJE2iTvwz3ZvqZfCkrCKvNTmWyN6NAg%3D&user%5Blogin%5D=XXXXX&user%5Bpassword%5D=XXXX&cookie%5Bremember_me%5D=off&commit=Login

Que manque-t-il d'autre ? Je pensais que cela serait suffisant ..?

Petite précision : Comme vous pouvez le voir, j'essaie de me connecter à https://www.assembla.com/user/login. Il s'agit juste d'un test car ce site était en https et avait un écran de connexion simple. Aucune mauvaise intention.

1voto

Chris Haas Points 23212

Ce post pourrait vous aider. Il a dû accéder à la page de connexion pour récupérer quelques cookies, puis les soumettre dans la méthode de connexion réelle :

HttpWebRequest response produces HTTP 422. Why ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X