#include <Crypt.au3>
Login('OgoГоша', 'DcPlusplus123')
Exit
Func Login($vUserName, $vUserPass)
Local $vSite = 'http://autoit-script.ru/'
;Получаем HTML код
Local $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET", $vSite)
$oHTTP.Send()
Local $vData = $oHTTP.Responsetext
;Достаем регулярными выражениями sid. Он понадобиться для шифрования.
Local $vTemp = StringRegExp($vData, 'hashLoginPassword.*?([[:xdigit:]]{32})', 1)
If Not IsArray($vTemp) Then Return SetError(1, 0, 0) ;Регулярка не сработала. Нет смысла продолжать, поэтому выходим.
Local $vSid = $vTemp[0] ;Получили sid
;Достаем регулярными выражениями PHPSESSID. Для гостей он выдается временный.
$vTemp = StringRegExp($vData, 'PHPSESSID=(\w+)', 1)
If Not IsArray($vTemp) Then Return SetError(2, 0, 0) ;Регулярка не сработала. Нет смысла продолжать, поэтому выходим.
Local $vSesSid = $vTemp[0] ;Получили PHPSESSID.
;Т.к актуальный пароль на сервер не передается он хешируется специальной функцией.
Local $vHash = sha1(sha1(strtolower(_Encoding_ANSIToUTF8($vUserName)) & _Encoding_ANSIToUTF8($vUserPass)) & $vSid);
;Получили хэш-пароль. Подготовим все данные для отправки.
Local $vPostData = 'user=' & $vUserName & '&passwrd=&cookielength=-1&hash_passwrd=' & $vHash
;Отправляем POST запрос на авторизацию
$oHTTP.Open("POST", $vSite & 'index.php?PHPSESSID=' & $vSesSid & '&action=login2', False)
$oHTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oHTTP.Send($vPostData)
;Получаем главную страницу
$oHTTP.Open("GET", $vSite)
$oHTTP.Send()
Local $HTMLSource = $oHTTP.Responsetext
Local $aName = StringRegExp($HTMLSource, '<li id="name".*?</li>', 1)
If Not IsArray($aName) Then
ConsoleWrite($HTMLSource & @LF)
Else
ConsoleWrite(StringRegExpReplace($aName[0], '<.*?>', '') & @LF)
EndIf
EndFunc ;==>Login
Func _Encoding_ANSIToUTF8($sString)
Return BinaryToString(StringToBinary($sString, 4))
EndFunc ;==>_Encoding_ANSIToUTF8
Func sha1($vData) ;//PHP стиль (изменено stl)
Return StringLower(StringSplit(_Crypt_HashData($vData, $CALG_SHA1), 2))
EndFunc ;==>sha1
Func strtolower($sData)
If Not $sData Or StringIsLower($sData) Then Return $sData
Local $vDatas = StringSplit($sData, '', 2), $vRet
For $vData In $vDatas
If StringRegExp($vData, '[A-Z]') Then
$vRet &= StringLower($vData)
Else
$vRet &= $vData
EndIf
Next
Return $vRet
EndFunc ;==>strtolower