powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Авторизация на web-узле и получение куков средствами VB
5 сообщений из 5, страница 1 из 1
Авторизация на web-узле и получение куков средствами VB
    #38529238
furiousangel256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток!

У меня есть задача к выполнению которой я никак не могу подобраться. Просто не могу понять с какой вообще стороны на неё смотреть...

Суть в следующем. Есть web-центр авторизации (в моём случае - win.mail.ru). Если передать на него свои учётные данные (почта/домен/пароль) то в случае успеха можно получить куки, используя элементы которых впоследствии возможно авторизоваться на других сервисах.

У меня есть пример того, как это реализовано с помощью PHP (он представлен ниже), но мне нужно выполнить задачу средствами VB. Подскажите - с чего начать? Может быть есть какие-то примеры?

Реализация на PHP
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
//авторизация
$line="";
$hostname = "win.mail.ru";
$path = "/cgi-bin/auth";
$login = $_POST['login'];
$domain = $_POST['domain'];
$password = $_POST['password'];
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);  
  if (!$fp) echo "Ошибка соединения, code error $errstr ($errno)
\n";  
  else 
  { 
    $data = "page=&post=&login_from=&Login=$login&Domain=$domain&Password=$password&\r\n\r\n"; 
  $headers = "POST $path HTTP/1.1\r\n";  
  $headers .= "Host: $hostname\r\n";  
  $headers .= "Content-Length: ".strlen($data)."\r\n"; 
  $headers .= "Connection: Close\r\n\r\n"; 
    fwrite($fp, $headers.$data);
//получение куков
    while (!feof($fp)) 
    {  
      $line .= fgets($fp, 1024);
    }  

    fclose($fp);  
  }

...
Рейтинг: 0 / 0
Авторизация на web-узле и получение куков средствами VB
    #38529616
AlbusFalco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
furiousangel256,

у меня было реализовано на очистку CUPS c терминальной станции:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
Sub PostX()
'On Error Resume Next
Dim strPost         As String
Dim Context As String
Dim x As MSXML2.XMLHTTP60
Set x = New MSXML2.XMLHTTP60
    
    
    Text1.Text = Text1.Text & "Получение id сессии..."
    DoEvents
    Context = GetUrlContext(url)
    cookie = GetCookies(url, "org.cups.sid")
    cookie = Mid$(cookie, 1, Len(cookie) - 1)
    Text1.Text = Text1.Text & "OK" & vbCrLf
    Text1.Text = Text1.Text & "ID: " & cookie & vbCrLf
    Text1.Text = Text1.Text & "POST запрос отмены заданий печати..."
    DoEvents
    Parameters = "org.cups.sid=" & cookie & "&OP=purge-jobs"
    
    x.open "POST", url, False, username, password
    x.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    x.setRequestHeader "Content-Length", Len(Parameters)
    x.send (Parameters)
    DoEvents
    Text1.Text = Text1.Text & "OK" & vbCrLf
    Debug.Print Parameters
    
    Text1.Text = Text1.Text & "POST запрос возобновления работы принтера..."
    DoEvents
    Parameters = "org.cups.sid=" & cookie & "&OP=start-printer"
    x.open "POST", url, False, username, password
    x.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    x.setRequestHeader "Content-Length", Len(Parameters)
    x.send (Parameters)
    Text1.Text = Text1.Text & "OK" & vbCrLf
    DoEvents
    Debug.Print Parameters
    
End Sub

Public Function GetCookies(ByVal url As String, Optional CookieName As String) As _
    String
    Dim Buffer As String
    Dim Length As Long
    
    Length = 10240
    Buffer = Space$(Length)
    If InternetGetCookie(url, vbNullString, Buffer, _
        Length) = 0 Then Exit Function
    
    Buffer = Left$(Buffer, Length)
    
    If Len(CookieName) = 0 Then
        GetCookies = Buffer
    Else
        Dim cookies() As String
        Dim i As Long, tmp As String
        
        cookies = Split(Buffer, ";")
        
        For i = 0 To UBound(cookies)
            tmp = LTrim$(cookies(i))
            If InStr(1, tmp, CookieName & "=", vbTextCompare) = 1 Then
                GetCookies = Mid$(tmp, Len(CookieName) + 2)
                Exit For
            End If
        Next
    End If
    
End Function



но, правда, аутентификация была первичной и шла из адресной строки: http://admin@admin:192.168.1.1]http://admin@admin:192.168.1.1
...
Рейтинг: 0 / 0
Авторизация на web-узле и получение куков средствами VB
    #38529805
furiousangel256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlbusFalco , попытался адаптировать твой код под первую половину своей задачи. Пытаюсь обращаться к серверу авторизации мейл.ру используя данные своей почты (в примере ниже они, конечно, удалены). При выполнении x.send (Parameters) получаю сообщение "Синтаксическая ошибка".

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub PostX()
'On Error Resume Next
Dim strPost         As String
Dim Context As String
Dim x As MSXML2.XMLHTTP60
Set x = New MSXML2.XMLHTTP60

    url = "win.mail.ru:80"
    login = "" 'тут указывается почтовый ящик без домена
    Domain = "" 'домен
    Password = "" 'пароль от почтового ящика
    Parameters = "page=&post=&login_from=&Login=" & login & "&Domain=" & Domain & "&Password=" & Password & "&"
    
    x.Open "POST", url
    x.setRequestHeader "Host", "win.mail.ru"
    x.setRequestHeader "Content-Length", Len(Parameters)
    x.setRequestHeader "Connection", "Close"
    x.send (Parameters)
        
End Sub



У меня тут возникает несколько вопросов.

1) Первый и основной. Что я делаю не так?))
2) На том куске кода что я привел в 1-ом сообщении темы есть следующее : POST $path HTTP/1.1\r\n (где $path = "/cgi-bin/auth"). Я не совсем понял - а где в нашем случае размещать эту информацию?
...
Рейтинг: 0 / 0
Авторизация на web-узле и получение куков средствами VB
    #38529970
furiousangel256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С ошибкой "Некорректный синтаксис" разобрался. Достаточно было подставить " http://" в начало url.

Теперь новая ошибка. При выполнении x.send я получаю "Отказано в доступе".

Чем это может быть вызвано?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
    url = "http://win.mail.ru/cgi-bin/auth"
    Parameters = "page=&post=&login_from=&Login=" & login & "&Domain=" & Domain & "&Password=" & Password
    x.Open "POST", url
    x.setRequestHeader "Host", "win.mail.ru"
    x.setRequestHeader "Content-Length", Len(Parameters)
    x.setRequestHeader "Connection", "Close"
    x.send (Parameters)
...
Рейтинг: 0 / 0
Авторизация на web-узле и получение куков средствами VB
    #38530237
AlbusFalco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
furiousangel256,

как-то так ближе:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
    url = "https://auth.mail.ru/cgi-bin/auth"
    Parameters = "Login=" & login & "&Domain=mail.ru&Password=" & password
    x.open "POST", url, False, login, password
    x.setRequestHeader "Host", "auth.mail.ru"
    x.setRequestHeader "Content-Length", Len(Parameters)
    x.setRequestHeader "Connection", "Close"
    x.send (Parameters)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Авторизация на web-узле и получение куков средствами VB
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]