Что нового

Авторизация вк WinHTTP

DanSaratov

Новичок
Сообщения
112
Репутация
1
Все примеры, которые нашёл на форуме не сработали.
Мониторил запросы Charles'oм, как передаётся логин и пароль не нашёл.
Цель авторизации - получить кукисы. Если есть другие способы это сделать, буду рад узнать о них.
 

Kasper

Знающий
Сообщения
70
Репутация
8
С авторизацией помочь не могу.
Но можете попробовать VK API.
https://vk.com/dev/
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Да, я тоже люблю VK API. Он очень удобный и специально для этого и предназначен. Вот даже функцию быстренько написал для авторизации через API.
Код:
#include <GUIConstants.au3>
#include <IE.au3>
Global $iAppID, $access_token

$iAppID = 4923780

$access_token = _VKAuth($iAppID, "offline,photos")
If Not @error Then
	MsgBox(0, "Auth OK! Access_token", $access_token, 30)
Else
	MsgBox(16, "Auth Error", "error#" & @error, 30)
EndIf

;========================================;

; функция авторизовывается через VK API.
; первым параметром передаётся ID приложения (App ID),
; вторым параметром передаются запрашиваемые права доступа.
; при успехе функция возвращает Access Token.
; при ошибке @error не равен нулю...
; Author: alex33 ( vk.com/alekssamos )
; include require: IE.au3, GUIConstants.au3
Func _VKAuth($aid, $scope = "offline")
	Local $gui, $oIE, $sAuthURL, $url, $flag, $token
	$sAuthURL = "https://oauth.vk.com/authorize?client_id=" & $aid & "&scope=" & $scope & "&redirect_uri=https://oauth.vk.com/blank.html&display=mobile&v=5.33&response_type=token"
	$oIE = _IECreateEmbedded()
	If Not IsObj($oIE) Then Return SetError(1, 0, 0)
	$gui = GUICreate("VK API авторизация", 640, 580, (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
	GUICtrlCreateObj($oIE, 10, 40, 600, 360)
	GUISetState(@SW_SHOW)
	_IENavigate($oIE, $sAuthURL)
	If @error Then
		GUIDelete($gui)
		Return SetError(2, 0, 0)
	EndIf
	$flag = 0
	While 1
		$url = _IEPropertyGet($oIE, "locationurl")
		If StringInStr($url, '/blank.html#') Then
			ConsoleWrite("URL: " & $url & @CRLF)
			$token = StringRegExpReplace($url, '.*?access_token=([^&]+).*', '$1')
			If @extended = 0 Then $token = ""
			$expires = StringRegExpReplace($url, '.*?expires_in=([\d]+).*', '$1')
			If @extended = 0 Then $expires = 0
			$uid = StringRegExpReplace($url, '.*?user_id=([\d]+).*', '$1')
			If @extended = 0 Then $uid = 0
			If $token <> "" Then $flag = 1
			ConsoleWrite(StringFormat("Info: token: %s; expires: %s; user ID: %s\r\n", $token, $expires, $uid))
			ExitLoop
		EndIf
		If GUIGetMsg() = $GUI_EVENT_CLOSE Then ExitLoop
	WEnd
	GUIDelete($gui)
	If $flag = 1 Then
		Return $token
	Else
		Return SetError(3, 0, 0)
	EndIf
EndFunc   ;==>_VKAuth
Ну а если нужна авторизация с cookie, то прошу, смотрите вот эту тему: Ответ #21 или Ответ #16.
 
Автор
DanSaratov

DanSaratov

Новичок
Сообщения
112
Репутация
1
Тему смотрел, примеры не сработали.
 
Автор
DanSaratov

DanSaratov

Новичок
Сообщения
112
Репутация
1
Получаю куки такого формата:
2015-08-20_195519.png


А в конце, error code: 9
 
Автор
DanSaratov

DanSaratov

Новичок
Сообщения
112
Репутация
1
И не лень тебе было)) Но не буду же я врать. У меня не работает. Как мне кажется косяк в функции __encodeURIComponent В консоль пишет POST_REQUEST: act=shorten&al=1&link=1,хотя я вбивал нормальную ссылку. Эта же функция используется для кодирования логина\пароля.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
DanSaratov сказал(а):
И не лень тебе было)) Но не буду же я врать. У меня не работает. Как мне кажется косяк в функции __encodeURIComponent В консоль пишет POST_REQUEST: act=shorten&al=1&link=1,хотя я вбивал нормальную ссылку. Эта же функция используется для кодирования логина\пароля.
Так. А это уже интересно. :smile: Да, для кодирования...
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Да, у меня тоже 3.3.12.0. Возможно что-то в системе не так, SCRIPTCONTROL неправильно работает...
Вот так попробуйте заменить функции:
Код:
Func __encodeURIComponent($sTxt)
	$sTxt = StringReplace($sTxt, '+', '%2B')
	$sTxt = StringReplace($sTxt, '=', '%3D')
	$sTxt = StringReplace($sTxt, '@', '%40')
	Return $sTxt
EndFunc   ;==>__encodeURIComponent
Func __decodeURIComponent($sTxt)
	$sTxt = StringReplace($sTxt, '%2B', '+')
	$sTxt = StringReplace($sTxt, '%3D', '=')
	$sTxt = StringReplace($sTxt, '%40', '@')
	Return $sTxt
EndFunc   ;==>__decodeURIComponent
 
Автор
DanSaratov

DanSaratov

Новичок
Сообщения
112
Репутация
1
Весёлые вещи творятся. Установил новую версию autoit'a в другую папку, проверил на нём - всё работает.
Удалил папку с новым autoit'ом, запустил функцию на старом, и.... Всё работает!!!.
Тема решена. Но вот почему всё заработало - я не понимаю.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
DanSaratov сказал(а):
Весёлые вещи творятся. Установил новую версию autoit'a в другую папку, проверил на нём - всё работает.
Удалил папку с новым autoit'ом, запустил функцию на старом, и.... Всё работает!!!.
Тема решена. Но вот почему всё заработало - я не понимаю.
Да, мне это тоже интересно :smile:
Какая-то мистика...
OffTopic:
Приведение какое-нибудь там компьютерное шалит, какой-нибудь призрак...
 
Верх