Залогинится на сайте. HttpWebRequest

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

Залогинится на сайте. HttpWebRequest

Сообщение oskolok_vatbI » 07.01.2010 (Чт) 16:58

Здравствуйте, супруга попросила сделать "входилку" на сайт с косметикой. И, хотя тема достаточно распространена, почти все предлагаемые примеры являются по сути этой статьей: http://www.vbstreets.ru/Articles/66484.aspx Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse).
Читал, пробовал по разному, установил Fiddler. Получилось такое:
Код: Выделить всё
Imports System.Text
Imports System.IO
Imports System.Net

Module Module1
    Dim myHttpWebResponse As HttpWebResponse
    Dim lang As String = "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"
    Dim chs As String = "windows-1251,utf-8;q=0.7,*;q=0.3"
    Dim encod As String = "gzip,deflate,sdch"
    Dim sCookies As String = ""
    Dim sQueryString As String = "ret_path=nid%2F172016&login=myTestlogin&password=pass"

    Sub Main()
        Dim myHttpWebRequest As HttpWebRequest = DirectCast(HttpWebRequest.Create("http://greenmama.ru"), HttpWebRequest)
        myHttpWebRequest.Proxy = New WebProxy("127.0.0.1", 8888)
        myHttpWebRequest.Method = "GET"
        myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0"
        myHttpWebRequest.Accept = "*/*"
        myHttpWebRequest.Headers.Add("Accept-Encoding", encod)
        myHttpWebRequest.Headers.Add("Accept-Language", lang)
        myHttpWebRequest.Headers.Add("Accept-Charset", chs)
        myHttpWebRequest.AllowAutoRedirect = False
        myHttpWebRequest.CookieContainer = New System.Net.CookieContainer()
        myHttpWebResponse = DirectCast(myHttpWebRequest.GetResponse, HttpWebResponse)
        'Fiddler - результат 302

        myHttpWebRequest = DirectCast(HttpWebRequest.Create("http://greenmama.ru"), HttpWebRequest)
        myHttpWebRequest.Proxy = New WebProxy("127.0.0.1", 8888)
        myHttpWebRequest.Method = "POST"
        myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0"
        myHttpWebRequest.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
        myHttpWebRequest.Headers.Add("Accept-Encoding", encod)
        myHttpWebRequest.Headers.Add("Accept-Language", lang)
        myHttpWebRequest.Headers.Add("Accept-Charset", chs)
        Dim ByteArr As Byte() = Text.Encoding.GetEncoding(1251).GetBytes(sQueryString)
        myHttpWebRequest.ContentLength = ByteArr.Length()
        myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length)
        'На следующей строке часто: The operation has timed out
        myHttpWebResponse = DirectCast(myHttpWebRequest.GetResponse(), HttpWebResponse)
        'Fiddler - результат 302

        'Тут как я понял нужно перейти на целевую страницу ?
        myHttpWebRequest = DirectCast(HttpWebRequest.Create("http://greenmama.ru"), HttpWebRequest)
        myHttpWebRequest.Proxy = New WebProxy("127.0.0.1", 8888)
        myHttpWebRequest.Referer = "http://greenmama.ru"
        myHttpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.38 Safari/532.0"
        myHttpWebRequest.Accept = "application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
        myHttpWebRequest.Headers.Add("Accept-Encoding", encod)
        myHttpWebRequest.Headers.Add("Accept-Language", lang)
        myHttpWebRequest.Headers.Add("Accept-Charset", chs)
        myHttpWebRequest = DirectCast(HttpWebRequest.Create("http://greenmama.ru"), HttpWebRequest)
        'Fiddler - результат 200
    End Sub
End Module

Подскажите пожалуйста, что мне нужно поправить.
Заранее благодарен.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Залогинится на сайте. HttpWebRequest

Сообщение MIT » 07.01.2010 (Чт) 17:00

oskolok_vatbI писал(а):Подскажите пожалуйста, что мне нужно поправить.
Что нужно поправить что бы что?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

Re: Залогинится на сайте. HttpWebRequest

Сообщение oskolok_vatbI » 07.01.2010 (Чт) 17:16

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

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Залогинится на сайте. HttpWebRequest

Сообщение MIT » 07.01.2010 (Чт) 17:54

А зачем там три запроса? Там одного достаточно - ПОСТ на главную страницу с данными по подобию твоего sQueryString.
Каким образом ты определяешь, что авторизация не прошла? Я заметил, что при неудачной авторизации перенаправление проиходит с GET параметром el=1 (или что-то такое, не помню)


[offtop]
З.Ы. сайт оставил негативное впечатление... Унылый интерфейс, перегружен мусором. Интересно, почему сейчас большинство сайтов делаются именно такими?
[/offtop]
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

Re: Залогинится на сайте. HttpWebRequest

Сообщение oskolok_vatbI » 07.01.2010 (Чт) 18:14

В Fiddler-е можно текущую страницу посмотреть, я посмотрел - на ней поля для ввода логина и пароля. И еще, в статье написано, что если результат 200, то что-то не так. Вот я и решил что авторизации не происходит.
Сейчас буду пробовать одним запросом сделать. Спасибо.

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Залогинится на сайте. HttpWebRequest

Сообщение MIT » 07.01.2010 (Чт) 18:17

oskolok_vatbI писал(а):если результат 200, то что-то не так
Глупость.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

Re: Залогинится на сайте. HttpWebRequest

Сообщение oskolok_vatbI » 07.01.2010 (Чт) 18:23

Там написано:

Если вы сделаете все правильно, то сервер возвратит код 302, в противном случае – код 200, со страницей, содержащей информацию об ошибке, либо форму авторизации.

Или это справедливо только для Яндекса ?

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Залогинится на сайте. HttpWebRequest

Сообщение MIT » 07.01.2010 (Чт) 19:08

Это справедливо для Яндекса в его текущем состоянии. Это может быть справедливо для миллионов одних сайтов и не справедливо для миллионов других, в каждом конкретном случае надо разбираться обособлено (если речь не идет о каком-то распространенном движке).
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList