ユーザー関連情報を取得するためにc#webclientを使用してフォーラムにログインしようとしています。問題は、ログインに失敗することです。必要なすべてのデータを投稿で送信しようとしました。
私の実際のコード:
var url = new Uri("http://www.hardwareluxx.de/community/");
string user = Properties.Resources.username;
string pass = Properties.Resources.password;
var client = new CookieAwareWebClient();
client.BaseAddress = @"http://www.hardwareluxx.de/community/";
var document = new HtmlDocument();
document.Load(new MemoryStream(client.DownloadData("index.php")));
postData = new NameValueCollection();
postData.Add("vb_login_username", user);
postData.Add("cookieuser", "1");
postData.Add("vb_login_password", "");
postData.Add("s", "");
postData.Add("securitytoken", "guest");
postData.Add("do", "login");
postData.Add("vb_login_md5password", GetMd5Hash(pass));
postData.Add("vb_login_md5password_utf", GetMd5Hash(pass));
document.Load(new MemoryStream(client.UploadValues(url + "login.php?do=login", postData)));
ログインに必要なmd5ハッシュを取得するための小さな支援メソッド:
public static string GetMd5Hash(string TextToHash)
{
//Prüfen ob Daten übergeben wurden.
if (string.IsNullOrEmpty(TextToHash))
{
return string.Empty;
}
//MD5 Hash aus dem String berechnen. Dazu muss der string in ein Byte[]
//zerlegt werden. Danach muss das Resultat wieder zurück in ein string.
MD5 md5 = new MD5CryptoServiceProvider();
byte[] textToHash = Encoding.Default.GetBytes(TextToHash);
byte[] result = md5.ComputeHash(textToHash);
return BitConverter.ToString(result);
}
また、Cookieが保存されているWebクライアント:
public class CookieAwareWebClient : WebClient
{
private readonly CookieContainer _cookie = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = _cookie;
}
return request;
}
}