winsock и код страницы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kifiro
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 06.09.2008 (Сб) 18:57

winsock и код страницы

Сообщение kifiro » 23.10.2009 (Пт) 8:32

Значит задача, нужно авторизоваться на сайте, и после авторизации получить код html страницы

Значит делаю:
Отправляю post запрос через winsock:
Код: Выделить всё
Parametrs = "page=&post=&login_from=&Login=testtest&Domain=bk.ru&Password=123123"
Winsock1.SendData "POST /cgi-bin/auth HTTP/1.1" & vbCrLf
Winsock1.SendData "Content-Type: application/x-www-form-urlencoded" & vbCrLf
Winsock1.SendData "Host: win.mail.ru" & vbCrLf
Winsock1.SendData "Content-Length: " & Len(Parametrs) & vbCrLf & vbCrLf
Winsock1.SendData Parametrs & vbCrLf


как код html страницы после авторизации получить??

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: winsock и код страницы

Сообщение alibek » 23.10.2009 (Пт) 9:47

Посмотреть на список событий этого компонента и подумать.
Lasciate ogni speranza, voi ch'entrate.

kifiro
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 06.09.2008 (Сб) 18:57

Re: winsock и код страницы

Сообщение kifiro » 24.10.2009 (Сб) 2:57

Код: Выделить всё
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim Data As String
Winsock1.GetData Data

Вычитал в статье про winsock
вывожу переменную Data в текстовый файл, получаю:
HTTP/1.1 302 OK
Server: nginx/0.7.62
Date: Sat, 24 Oct 2009 00:05:18 GMT
Content-Type: text/html
Connection: close
Set-Cookie: t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAACAABEFxQcA; expires=Thu, 22 Apr 2010 00:05:18 GMT; path=/; domain=.mail.ru
Set-Cookie: Mpop=1256342718:0d6c7f505e5f4d7c190502190a1d00041c01034f6a5d5e465e0704070c1d037b7518405d5d19535b1f4540:qdd@bk.ru:; expires=Fri, 22 Jan 2010 00:05:18 GMT; path=/; domain=.mail.ru
Location: http://win.mail.ru/cgi-bin/checkcookie? ... 535b1f4540
Set-Cookie: mrcu=5A674AE244BE6FCA7AED0100007F; expires=Tue, 22 Oct 2019 00:05:18 GMT; path=/; domain=.mail.ru
Cache-Control: no-cache,no-store,must-revalidate
Pragma: no-cache
Expires: Fri, 24 Oct 2008 00:05:18 GMT
Last-Modified: Sat, 24 Oct 2009 04:05:18 GMT
Content-Length: 141
X-Host: f233.mail.ru

<HTML>http://win.mail.ru/cgi-bin/checkcookie?id=0d6c7f505e5f4d7c190502190a1d00041c01034f6a5d5e465e0704070c1d037b7518405d5d19535b1f4540</HTML>


Явно тут что-то не так. А что? подскажите! Запрос вроде правильный, если в браузере его ввести, то логиниться без проблем!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: winsock и код страницы

Сообщение iGrok » 24.10.2009 (Сб) 3:31

kifiro писал(а):Явно тут что-то не так. А что? подскажите! Запрос вроде правильный, если в браузере его ввести, то логиниться без проблем!

Ну.. Если уж ты решил работать напрямую через сокеты, а не через хотя бы WinHTTPRequest, продразумевается, что ты хорошо знаешь HTTP-протокол, и для тебя не является секретом, что же такое Location: http://win.mail.ru/cgi-bin/checkcookie? ... 535b1f4540 и что с ним делать.
Если же это не так.. Могу только посоветовать почитать подробнее про протокол HTTP, либо сразу не мучаться и перейти на WinHTTPRequest. =)

З.Ы. Впрочем, он за тебя тоже всю работу не сделает. Перенаправить - перенаправит, а вот с куками ничего не сделает.
Так что свой совет отзываю. =)

Location: http://... - это один из видов редиректа. Заголовок, призывающий тебя загрузить ресурс, указанный после Location.
Соответственно, при этом нужно передавать полученные куки.

Ну и HTTP статус 302 вместо 200 должен был тебе подсказать направление копания. Всё-таки, 302я - это Found (Moved Temporarily), а нифига не ОК.
И согласно спецификации, запрошенная страница находится по адресу, который сервер вернул в Location.
label:
cli
jmp label

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: winsock и код страницы

Сообщение djalex777 » 24.10.2009 (Сб) 21:11

iGrok писал(а):З.Ы. Впрочем, он за тебя тоже всю работу не сделает. Перенаправить - перенаправит, а вот с куками ничего не сделает.
Так что свой совет отзываю. =)

Тут ты не прав - с Cookie WinHTTPRequest всегда работает автоматически.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: winsock и код страницы

Сообщение iGrok » 24.10.2009 (Сб) 22:45

djalex777 писал(а):Тут ты не прав - с Cookie WinHTTPRequest всегда работает автоматически.

Ммм.. Не могу согласиться.

Некоторое время назад через личку помогал Debugger'у сделать авторизацию на одном сайте через WHR.
После отправки формы авторизации, шёл автоматический редирект при помощи Location на главную страницу.
Так вот, WHR куки получал, но автоматом их не отправлял. Пришлось отрубать следование по переходам (.Option(WinHttpRequestOption_EnableRedirects) = False), получать куки(GetResponseHeader("Set-Cookie") тоже не совсем корректно работает - получает только первый заголовок. А сервер их хоть десять может отправить - приходилось брать GetAllResponseHeaders, и парсить самому), после чего отправлять новый запрос уже на нужную страницу, подсовывая полученную куку (SetRequestHeader).
label:
cli
jmp label


Вернуться в Visual Basic 1–6

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

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

    TopList