C # WebClient Войти на сайт - PullRequest
       28

C # WebClient Войти на сайт

4 голосов
/ 22 сентября 2009

Я пытаюсь зайти на сайт, указав свое (правильное) имя пользователя и пароль.

Вот код:

        string URL = @"https://www.t-mobile.co.uk/service/your-account/login/";

        string username = "a_user";
        string password = "a_password";
        //ServicePointManager.Expect100Continue = false;

        CookieAwareClient client = new CookieAwareClient();


        NameValueCollection postData = new NameValueCollection();
        postData.Add("username", username);
        postData.Add("password", password);

        byte[] response = client.UploadValues(URL,  postData);

        ASCIIEncoding enc = new ASCIIEncoding();
        string Source = enc.GetString(response);

Но, к удивлению, это не вход в систему. Я просто вернул страницу входа.

Буду признателен за любую помощь, и это делает мою голову сейчас !!

Спасибо, Jim

Для полноты вот мой класс WebClient -

public class CookieAwareClient : WebClient
{
    private CookieContainer m_container = new CookieContainer();
    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest request = base.GetWebRequest(address);
        if (request is HttpWebRequest)
        {
            (request as HttpWebRequest).CookieContainer = m_container;
        }
        return request;
    }
}

Ответы [ 4 ]

2 голосов
/ 22 сентября 2009

Сообщение публикуется на сервере, если вы пытаетесь войти в браузер:

org.apache.struts.taglib.html.TOKEN = 81243ce1a02ff285745f7c25b86234a9 & showLogin = истина и обновление = & имя пользователя = имя пользователя и пароль = пароль и отправить = Log + в

Попробуйте также добавить эти значения и выяснить, как генерируется TOKEN.

РЕДАКТИРОВАТЬ: проверьте, что куки, которые дает вам эта страница, тоже отправлены обратно.

ДРУГОЕ РЕДАКТИРОВАТЬ: слишком посмотреть, что происходит между сервером и браузером (= Firefox), когда вы делаете запрос или публикуете данные, используйте LiveHttpHeaders addon.

1 голос
/ 22 сентября 2009

Вы можете попробовать добавить пользовательский агент, например:

client.Headers.Add("user-agent", "your user agent here");

Иногда веб-сайты хотят убедиться, что определенный браузер используется и / или притворяется человеком.

0 голосов
/ 02 октября 2009

Также я замечаю, что вы создаете новый CookieContainer каждый раз, когда создаете свой класс CookieAwareClientn. Это означает, что ваши куки не сохраняются между запросами. Сделайте этот член статическим, чтобы вы всегда использовали один и тот же cookiecontainer.

Также, как и другие, вам придется экспериментировать. Что я делаю, я загружаю и устанавливаю Firebug и вижу, как браузер отправляет запрос / ответ вместе с заголовками и т. Д. Затем я дублирую тот же запрос, используя HttpWebRequest / WebClient.

0 голосов
/ 22 сентября 2009

Я вижу 1 начальную проблему, вы отправляете обратно на URL страницы, а не на URL отправки (на котором есть идентификатор сеанса, и в моем коде я бы проверял действительный идентификатор сеанса). Существует также функция javascript, вызываемая до отправки метода processSaveUserCh (), который создает cookie для имени пользователя. Боязнь всего этого может помешать вашему успешному входу в систему, я боюсь, это эксперимент и открытое упражнение.

...