Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 | 4 |

 

  Вопрос: Залогиниться к Mail.Ru из VB Добавлено: 19.09.04 21:25  

Автор вопроса:  Comanche

Ответить

  Ответы Всего ответов: 46  

Номер ответа: 16
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #16
Добавлено: 22.09.04 18:30
Pavel дал правильный ответ на твой вопрос. От себя добавлю: изучайте люди НТТР и меньше спрашивайте, тогда авторизация на мейл.ру не будет для вас дилемой.

Беру "Тестер" и отсылаю пакет:
-------------------
POST http://auth.mail.ru/cgi-bin/auth HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*
Referer: http://win.mail.ru/cgi-bin/splash
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Proxy-Connection: Keep-Alive
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Host: auth.mail.ru
Content-Length: 40
Pragma: no-cache
Cookie: p=wrYEAGDPxgAA; t=obLD1AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAABELxAcA; c0=XNVwQgAAAAB10wEAAAAA; Mpop=1094310579:057d6503505d584619050219091d011b03050a4f6a5d5e465e0404031b00757f1f555d4c545d03115c565c5b1b4341:blume2@mail.ru

Login=blume2&;Domain=mail.ru&Password=123

-----------------

Получаю вполне реальный ответ без перенаправления:
-----------------
HTTP/1.1 200 OK
Date: Wed, 22 Sep 2004 14:24:07 GMT
Server: Apache/1.3.27 (Unix) mod_perl/1.27 rus/PL30.17
Pragma: no-cache
Cache-Control: no-cache, no-store
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Frontend-key: 194.67.57.149
Connection: close
Content-Type: text/html; charset=windows-1251
Last-Modified: Wed, 22 Sep 2004 14:24:07 GMT

-----------------
и дальше идет тело страницы, где меня просят заново ввести пароль.
Так в чём проблема???

Ответить

Номер ответа: 17
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #17 Добавлено: 22.09.04 19:59
Проблема в том, что аналогичные действия у меня не увенчались успехом, и с учётом твоего последнего ответа я теперь точно не понимаю, в чём причина. Ладно, буду ковыряться. Другой вопрос: как я понимаю - поправьте, если ошибаюсь - из-за того, что в пакете содержится "кука", я не могу просто запихнуть этот пакет "как константу" в код своей программы, рассчитывая при этом, что программа запустится и на другом компьютере тоже. Так?! ведь "кука" - это файлик, и в теле пакета (после слова "Cookie:";) наверняка идёт ссылка на конкретное имя этого файла. А на другом компе этого файла уже не будет... значит ли это, что файл "куки" я должен найти и затем как-то таскать вместе со своей прогой?!

И ещё: может, отключить на своём компе поддержку "куков", очистить папку с ними, а затем попробовать залогиниться с "перехватом"? м.б. строка подключения будет другой?

Ответить

Номер ответа: 18
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #18
Добавлено: 22.09.04 21:55
Во первых, действительно, когда логиниться с правильным паролем, тогда сервер отвечает редиректом, нужно следовать по ссылке, указанной в ответе сервера.
Во вторых, куки разные браузеры сохраняют в файл, а при потребности передают в НТТР пакетах. Надеюсь понятно?Нет?Куки НЕ могут ни на что указывать, ето просто набор "переменная=значение" и все.

Ответить

Номер ответа: 19
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #19
Добавлено: 22.09.04 21:59
P.S. куки можно ваще убрать, и не парить себе голову. Пусть майл.ру думает, что ты отключил куки в браузере.

Ответить

Номер ответа: 20
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #20 Добавлено: 23.09.04 13:00
Может если кука есть то выдается страница X, а если нет - Y?


Ответить

Номер ответа: 21
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #21 Добавлено: 23.09.04 16:48
2DaSharm: Небольшая "подвижка" есть. Я отключил поддержку куков и очистил их папку. После этого перехватил твоим отладчиком исходящий пакет - и в нём действительно уже нет блока "Cookie:". В итоге, пакет получился более читаемым. Я отправил его на MAIL.RU и - о чудо! - наконец-то не возникло никаких ошибок: я получил страницу, что "document has moved here". Причём если по ссылке "here" щёлкнуть мышью, то я попадаю в свой почтовый ящик. Это прекрасно, но вот как мне "щёлкнуть" ИЗ КОДА? Допустим, я тоже запишу пакет, отправляемый этим щелчком, но вот как передать его из кода "вместе" с первым? (просто сразу после первого?!) да и в этой ссылке сидит (вроде бы) опять ссылка на куку (почему?)

Ответить

Номер ответа: 22
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #22
Добавлено: 23.09.04 16:55
Да, просто отправь ещё один НТТР пакет после первого. А кука в ссылке сидеть не может, это кошмар был бы какой-то :)

Ответить

Номер ответа: 23
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #23 Добавлено: 23.09.04 19:43
Но этот второй пакет я, похоже, не могу просто записАть и потом использовать повторно: эта ссылка ("here";) выглядит примерно так: http://www.mail.ru/.../checkcookie?id=<xxx>, где <xxx> - довольно длинная последовательность каких-то символов, раз от раза меняющаяся. Т.е. один раз щёлкнув по ней вручную и записав этот пакет, я потом вряд ли смогу использовать этот же пакет повторно. Как быть?

Ответить

Номер ответа: 24
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #24 Добавлено: 23.09.04 20:10
Я посмотрел ещё раз на этот пакет, полученный с MAIL.RU, - помимо фразы "document has moved here" там есть ещё одна особенность: редиректный URL содержится как в тэге <TITLE>, так и в тэге <BODY> - в единственном его тэге <A>. В принципе, можно просто выделить URL оттуда, а потом ShellExecute "open", .... - и вот он доступ к ящику. Но... как-то это неправильно ("некрасиво";), по-моему. Что скажешь?

И ещё: почему всё-таки после удачной передачи первого пакета я не логинюсь в ящик СРАЗУ, а попадаю на эту чёртову "редиректную" страницу? типа это защита MAIL.RU? от чего? можно ли как-то это обойти и попадать в ящик сразу?

Ответить

Номер ответа: 25
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #25
Добавлено: 23.09.04 21:39
Попадать сразу не выйдет, я думаю. А редирект ещё должен быть в одном из полей НТТР ответа сервера, все что тебе нужно, это вытащить из нужного поля ссылку и использовать по своему усмотрению. А "некрасиво" здесь не к месту, иначе просто никак, мы действуем так, как ситуация требует :)

Ответить

Номер ответа: 26
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #26 Добавлено: 23.09.04 23:41
В ответе сервера и правда есть поле "Location", где после двоеточия идёт тот же самый URL. Только вот это поле существует в пределах серой таблички, которая расположена ДО тэгов <HTML>, в самом начале ответа. Я вот не пойму: это сам Mail.Ru так отвечает, или же эту табличку твоя прога в начало приклеивает? Просто если это твоя прога, то мне в своей это поле "Location" не получить никак :))

Ответить

Номер ответа: 27
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #27 Добавлено: 24.09.04 13:25
Вроде разобрался. Не посмотришь код?

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    ;(ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long
Dim Packet As String

Private Sub Form_Click()
    Winsock1.Close
End Sub

Private Sub Form_Load()
    ;Dim Login As String, Password As String
    ;Dim cLength As Integer ' << длина самой последней строки пакета
    
    Login = "XXXXX"
    Password = "YYYYYY"
    cLength = 39 + Len(Login) + Len(Password)
    
    Packet = _
       "POST http://win.mail.ru/cgi-bin/auth HTTP/1.0" & vbCrLf & _
       "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*" & vbCrLf & _
       "Referer: http://www.mail.ru/" & vbCrLf & _
       "Accept-Language: ru" & vbCrLf & _
       "Content-Type: application/x-www-form-urlencoded" & vbCrLf & _
       "Proxy-Connection: Keep-Alive" & vbCrLf & _
       "Host: win.mail.ru" & vbCrLf & _
       "Content-Length: " & CStr(cLength) & vbCrLf & _
       "Pragma: no-cache" & vbCrLf & vbCrLf & _
       "Mpopl=1&Login=" & Login & "&;Domain=mail.ru&Password=" & Password
    
    ' Примечание: строчку
    ' "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; MRA 3.0 (build 00614))" & vbCrLf & _
    ' из пакета выкинул - хуже на стало :))
    '
    ' А вот величину "Mpopl" приравнял единице наобум - и тоже вроде прокатило...
    
    Winsock1.Close
    Winsock1.LocalPort = 0
    Winsock1.Connect "mail.ru", 80
End Sub

Private Sub Winsock1_Close()
    ;Debug.Print ">> Closed."
End Sub

Private Sub Winsock1_Connect()
    ;Debug.Print ">> Connected!"
    Winsock1.SendData Packet
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    ;Dim strData As String, fN As Integer
    ;Dim Location As String, pos As Long
    
    Winsock1.GetData strData
    ;Debug.Print ">> Server response:"
    ;Debug.Print strData
    
    fN = FreeFile
    Open App.Path + "\Response.html" For Binary Access Write As #fN
    Put #fN, , strData
    Close #fN
    
    pos = InStr(1, strData, "Location:";)
    If pos > 0 Then
        ' Наверное, сервер ответил редиректом
        Location = Mid$(strData, pos + 10, InStr(pos, strData, vbCrLf) - pos - 10)
        ShellExecute Me.hwnd, "Open", Location, "", "", 1&
    Else
        ' просто открываем Response.html
        ShellExecute Me.hwnd, "Open", App.Path + "\Response.html", "", App.Path, 1&
    End If
    
End Sub

Private Sub Winsock1_SendComplete()
    ;Debug.Print ">> Send complete!"
End Sub

======================================================================================================

Нет ли каких "ляпов" с моей стороны?

И ещё вопрос:
Winsock1.Connect "mail.ru", 80 - работает, а вот
Winsock1.Connect "www.mail.ru", 80 или
Winsock1.Connect "http://www.mail.ru", 80 - НЕ РАБОТАЕТ.

ПОЧЕМУ?

Ответить

Номер ответа: 28
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #28
Добавлено: 24.09.04 13:55
В принципе все правильно, а www.mail.ru может не быть сопоставлено с АйПи адресом. "http://www.mail.ru" использовать нельзя, так, как "http://" не может быть составной частью домена.

Ответить

Номер ответа: 29
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #29 Добавлено: 24.09.04 15:07
Т.е. в ОБЩЕМ случае мне нужно всегда выделять из URL'а "доменную часть", так? ну или иметь URL заданный в виде явного IP...

Кстати, у меня в этом коде есть строчка "Наверное, сервер ответил редиректом". Чтобы не "гадать", мне посоветовали воспользоваться следующей информацией:

http://www.vbip.com/winsock/winsock_http_07_01.asp

Там чётко расписано, как точно определить, был редирект или нет. Так что реализую это в своём коде.

Ещё вопрос:
Мне кажется, что код события Winsock1_DataArrival написан у меня неверно - я в нём предполагаю, что весь ответ придёт "одним куском". А ведь вроде как надо накапливать ответы, полагая, что это событие может отработать более одного раза... или нет?

Ответить

Номер ответа: 30
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #30
Добавлено: 24.09.04 16:17
[q]весь ответ придёт "одним куском"[/q]
Для определения конца данных используй поле Content-Length в НТТР ответе сервера. Там указано количество байт в странице.

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам