Вы можете продолжать использовать WebClient для POST (вместо GET, который является HTTP-глаголом , который вы в настоящее время используете с DownloadString), но я думаю, вам будет легче работать с (немного ) низкоуровневые классы WebRequest и WebResponse.
Здесь есть две части: первая - опубликовать форму входа, вторая - восстановить заголовок «Set-cookie» и отправить его обратно на сервер как «Cookie» вместе с вашим GET-запросом. С этого момента сервер будет использовать этот файл cookie, чтобы идентифицировать вас (при условии, что он использует проверку подлинности на основе файлов cookie, и я вполне уверен, что эта страница возвращает заголовок Set-cookie, содержащий «PHPSESSID»).
ОТПРАВКА на форму входа
Форму сообщений легко смоделировать, это всего лишь случай форматирования ваших данных постов следующим образом:
field1=value1&field2=value2
Используя WebRequest и код, который я адаптировал из Скотт Хансельман , вот как вы можете отправить данные формы POST в форму входа в систему:
string formUrl = "http://www.mmoinn.com/index.do?PageModule=UsersAction&Action=UsersLogin"; // NOTE: This is the URL the form POSTs to, not the URL of the form (you can find this in the "action" attribute of the HTML's form tag
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();
}
EDIT:
Если вам нужно просмотреть результаты первого POST, вы можете восстановить полученный HTML-код:
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
Поместите это прямо под cookieHeader = resp.Headers["Set-cookie"];
, а затем проверьте строку, содержащуюся в pageSource.