ユーザーを特定の詳細でログインし、正規表現を使用してログインした後、次のページから値を取得して表示するプログラムを作成しようとしています。機能間でログイン状態を維持できるように Cookie などを保存しようとしましたが、機能していないようです。これが私のコードです:
public void initiateCredits(string user, string pass)
{
WebBrowser wb1 = new WebBrowser();
wb1.Navigate("http://site.com/login.php");
string webData = wb1.DocumentText;
Regex check = new Regex("(?<=You have)(.*)(?=credits)", RegexOptions.Singleline);
bool checkmatch = check.IsMatch(webData);
if (checkmatch == true)
{
return;
}
else
{
ServicePointManager.Expect100Continue = false;
string url = "http://site.com/login.php";
string pass_d = Base64.decode(pass);
string postData = String.Format("username=" + user + "&password=" + pass_d);
//byte[] Post = Encoding.UTF8.GetBytes(postData);
//WebClient wc = new WebClient();
WebRequest req = WebRequest.Create(url);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = Encoding.UTF8.GetBytes(postData);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse resp = req.GetResponse();
cookieHeader = resp.Headers["Set-cookie"];
//byte[] response = wc.UploadValues(url, new NameValueCollection()
//{
//{ "username", user },
//{ "password", pass_d }
//});
creditlogin = true;
//string AdditionalHeaders = "Content-Type: application/x-www-form-urlencoded";
//wb.Navigate(url, null, Post, AdditionalHeaders);
}
そして、実際にクレジットを取得しようとします:
public string getCredits()
{
if (creditlogin == true)
{
string pageSource;
string getUrl = "http://site.com/login.php";
WebRequest getRequest = WebRequest.Create(getUrl);
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
//System.Net.WebClient wc2 = new System.Net.WebClient();
//string webData = wc2.DownloadString("http://beta.myvmk.com/security_check.php");
Regex r = new Regex("(?<=You have)(.*)(?=credits)", RegexOptions.Singleline);
Match credits = r.Match(pageSource);
return credits.ToString();
}
else
{
return "err";
}
}
私は本当に何日もこれにこだわっています。誰か助けてもらえますか? ありがとう!現在、「エラー」が返されるだけなので、initiateCredits が正しく機能していないことを意味していると思います。