Скорее всего, сервер отправляет куки после входа в систему. Вам необходимо отправить те же значения, что и в форме входа. (это можно сделать с помощью UploadValues ()) Однако вам необходимо сохранить полученные куки в CookieContainer .
Когда я сделал это, я сделал это с помощью HttpWebRequest, однако для http://couldbedone.blogspot.com/2007/08/webclient-handling-cookies.html вы можете создать подкласс WebClient и переопределить метод GetWebRequest (), чтобы он поддерживал cookie.
О, я также нашел полезным использовать Fiddler при ручном доступе к веб-сайту, чтобы увидеть, что на самом деле отправляется туда и обратно, поэтому я знал, что я пытался воспроизвести.
edit, запрошена доработка: я могу только уточнить, как это сделать с помощью HttpWebRequest, я не сделал это с помощью WebClient. Ниже приведен фрагмент кода, который я использовал для входа.
private CookieContainer _jar = new CookieContainer();
private string _password;
private string _userid;
private string _url;
private string _userAgent;
...
string responseData;
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(_url);
webRequest.CookieContainer = _jar;
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.UserAgent = _userAgent;
string requestBody = String.Format(
"client_id={0}&password={1}", _userid, _password);
try
{
using (StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream()))
{
requestWriter.Write(requestBody);
requestWriter.Close();
using (HttpWebResponse res = (HttpWebResponse)webRequest.GetResponse())
{
using (StreamReader responseReader = new StreamReader(res.GetResponseStream()))
{
responseData = responseReader.ReadToEnd();
responseReader.Close();
if (res.StatusCode != HttpStatusCode.OK)
throw new WebException("Logon failed", null, WebExceptionStatus.Success, res);
}
}
}