2017-03-15 10 views
0

i'am要求とイムので、私がしようとしたHttpWebRequestの認証後、C#で要求

POST /sso HTTP/1.1 
Host: account.ankama.com 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3 
Referer: http://www.dofus.com/fr 
Cookie: LANG=fr; _ga=GA1.1.1197518596.1489526959; SID=452EDCF3C4BD32057F9F08254BE40001 
Connection: close 
Upgrade-Insecure-Requests: 1 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 102 

action=login&from=http%3A%2F%2Fwww.dofus.com%2Ffr&login=user123&password=password1232F&remember=1 

C#コードにconvertthisしようとしてチェックするためにげっぷスーツを使用して:ファイルODMに

 HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://account.ankama.com/sso?action=login&from=https%3A%2F%2Faccount.ankama.com%2Ffr%2Fsecurite%2Fmode-restreint%3Ff%3Dhttps%3A%2F%2Faccount.ankama.com%2Ffr%2Fidentification%3Ff%3Dhttps%3A%2F%2Faccount.ankama.com%2Ffr%2Fcompte%2Finformations&login=user111&password=password1472F"); 
     Request.ContentType = "application/x-www-form-urlencoded"; 
     Request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
     Request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"; 
     Request.Host = "account.ankama.com";   
     Request.Referer = "https://account.ankama.com/fr/votre-compte/profil"; 
     Request.Method = "POST"; 
     Request.AllowAutoRedirect = true; 
     Request.CookieContainer = new CookieContainer(); 
     //quest.Credentials = new NetworkCredential("user123", "passowrd123"); 
     using (HttpWebResponse response = (HttpWebResponse)Request.GetResponse()) 
     { 
      using (Stream stream = response.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(stream); 
       StreamWriter writer = new StreamWriter("odm.html"); 
       writer.Write(reader.ReadToEnd()); 
       writer.Close(); 
       reader.Close(); 
       Console.WriteLine("Done"); 
      } 

     } 

     Console.ReadKey(); 

を.html HTMLコードに、ユーザーが実際にログインしたときに表示される「アカウント」が含まれているかどうかを確認します。 しかし、これは私がまだ知らないいくつかの理由のために働いているようだ。 私はHTTPのステータスコードについていくつかの調査をしましたが、実際の既存のアカウントと有効なアカウントでログインしようとした後では、別のコンテンツ長の同じhttpコード302を返します。

EDIT: 問題は私が唯一のユーザーはあなたがリクエストボディを送信しようとしている

+0

あなたは機密情報があなたのC#のクエリ文字列を提示しています。私はそれらを削除することをお勧めします。 – StfBln

+0

リクエストにクッキーを追加しましたか?通常、私はすべてを持っていくというアプローチをとって、ひとつずつ役に立たないように見える作品を取り除きます。 – StfBln

+0

私は彼らのせずにreqeustを送るために私のバップスーツを試して、それは動作するので、彼らは本当に重要ではない – Huster

答えて

1

ログインしようとしているページを見つけ、HTMLファイル内の「マイアカウント」を見つけていないですクエリ文字列では、要求メソッドをPOSTとして設定していますが、本文を送信していません。リクエストURLは次のようになります。

https://account.ankama.com/sso 

そして、あなたはリクエストを送信する前にリクエストボディを設定する必要があります。それが表示されます

var bytes = Encoding.UTF8.GetBytes("action=login&from=http%3A%2F%2Fwww.dofus.com%2Ffr&login=user123&password=password1232F&remember=1"); 
request.ContentLength = bytes.Length; 

using (var stream = request.GetRequestStream()) 
{ 
    stream.Write(bytes, 0, bytes.Length); 
} 
+0

約touhght! 、私は今それを試してみます – Huster

+0

それはサー!例外を取得することを除いて "私はストリームを読み取っている間にrequest.ContentLengthプロパティを設定することはできません – Huster

+1

@Huster okey、私はコードを更新しました。 –

関連する問題