Ви можете продовжувати використовувати WebClient для POST (замість GET, що є дієсловом HTTP ви зараз користуєтесь із DownloadString), але я думаю, вам буде простіше працювати з (трохи) класами нижчого рівня WebRequest та WebResponse.
У цьому є дві частини - перша - опублікувати форму для входу, друга - відновити заголовок "Set-cookie" і відправити його назад на сервер як "Cookie" разом із вашим запитом GET. Сервер використовуватиме цей файл cookie, щоб ідентифікувати вас відтепер (припускаючи, що він використовує аутентифікацію на основі файлів cookie, і я впевнений, що ця сторінка повертає заголовок Set-cookie, який містить "PHPSESSID").
Опублікування у формі для входу
Публікації форм легко імітувати, це просто випадок форматування даних ваших публікацій таким чином:
field1=value1&field2=value2
Використовуючи WebRequest та код, який я адаптував від Скотта Хенсельмана , ось як ви розмістите дані форми у формі для входу:
string formUrl = "http://www.mmoinn.com/index.do?PageModule=UsersAction&Action=UsersLogin";
string formParams = string.Format("email_address={0}&password={1}", "your email", "your password");
string cookieHeader;
WebRequest req = WebRequest.Create(formUrl);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse resp = req.GetResponse();
cookieHeader = resp.Headers["Set-cookie"];
Ось приклад того, що ви повинні бачити в заголовку Set-cookie для вашої форми входу:
PHPSESSID=c4812cffcf2c45e0357a5a93c137642e; path=/; domain=.mmoinn.com,wowmine_referer=directenter; path=/; domain=.mmoinn.com,lang=en; path=/;domain=.mmoinn.com,adt_usertype=other,adt_host=-
ОТРИМАННЯ сторінки за формою входу
Тепер ви можете виконати свій запит GET на сторінці, для якої потрібно ввійти в систему.
string pageSource;
string getUrl = "the url of the page behind the login";
WebRequest getRequest = WebRequest.Create(getUrl);
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
РЕДАГУВАТИ:
Якщо вам потрібно переглянути результати першого POST, ви можете відновити повернутий HTML за допомогою:
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
Помістіть це безпосередньо нижче, cookieHeader = resp.Headers["Set-cookie"];
а потім огляньте рядок, що міститься в pageSource.