Что нового

[Сеть, интернет] вытащить данные из входящего пакета

andreitrane

Новичок
Сообщения
141
Репутация
3
вот кусок входящего пакета
Код:
"user_id":346340,"group_id":0,"is_app_user":1,"auth_key":"5365464567270637eab77cc054038852d","language":"0","parent_language"
что надо прописать в
Код:
$sid = StringRegExpReplace($sHtmlProfile, '...............', '\1')
    $sauth = StringRegExpReplace($sHtmlProfiletext, '....................', '\1')

чтобы вытащить строчки 346340 и 5365464567270637eab77cc054038852d в соответствующие строчки

тут я полюбому написал что то неправильное
Код:
$sid = StringRegExpReplace($sHtmlProfile, '(?s).*?"user_id":(\d+),"group_id?.*', '\1')
    $sauth = StringRegExpReplace($sHtmlProfiletext, '(?s).*?"auth_key":"(.*?)"?.*', '\1')


потому что мне обе строки выдает какую то фигню, дажене буквы а какие то спецсимволы....
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
andreitrane
Попробуйте так:
Код:
$sString = '"user_id":346340,"group_id":0,"is_app_user":1,"auth_key":"5365464567270637eab77cc054038852d","language":"0","parent_language"'

$sId = StringRegExpReplace($sString, '.*?id":(\d+),"?.*', '\1')
$sAuth = StringRegExpReplace($sString, '.*?key":"(.*?)",?.*', '\1')
MsgBox(64, 'Info', 'ID: ' & $sId & @LF & 'Key: ' & $sAuth)
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
madmasles
спасибо, работает, но если взять весь пакет, то и выводит весь пакет без обреза
Код:
$sString = FileRead(@ScriptDir&"\пакет.txt")
	$sId = StringRegExpReplace($sString, '.*?id":(\d+),"?.*', '\1')
$sAuth = StringRegExpReplace($sString, '.*?key":"(.*?)",?.*', '\1')


файл залил в посте ниже
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
andreitrane
Зачем такая портянка? Прикрепите к сообщению пакет.txt.
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
блин, я же заключал текст в code , ну ладно, вот файл
http://zalil.ru/30963585
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
andreitrane
Код:
$sString = FileRead(@ScriptDir & '\пакет.txt')

$sId = StringRegExpReplace($sString, '(?s).*?id":(.*?),"?.*', '\1')
$sAuth = StringRegExpReplace($sString, '(?s).*?key":"(.*?)",?.*', '\1')
MsgBox(64, 'Info', 'ID: ' & $sId & @LF & 'Key: ' & $sAuth)
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
madmasles
спасибо, из файла находит, но если же прямо из входящего пакета, то выходят символы, а не нужные куски.....
вот использовал ваш код, может быть даже с отправкой чтото намудрил.....
Код:
Global $oWinHttpError, $iEventError = 0, _
        $sEmail = 'мыло', _
        $sPass = 'пароль', _
        $sText, $sFile = @ScriptDir & '\UserProfile.txt', $hFile

$oWinHttpError = ObjEvent('AutoIt.Error', '_WinHttpErrorHandler')

$sText = _GetUserProfile_VK($sEmail, $sPass)
If @error Then
    MsgBox(16, 'Error', @error)
    Exit
Else
    $hFile = FileOpen($sFile, 2)
    FileWrite($hFile, $Text)
    FileClose($hFile)
    MsgBox(64, 'OK', 'OK')
    Exit
EndIf

Func _GetUserProfile_VK($sEmailUser, $sPassUser)
    Local $oHTTP, $sCookie_1, $sCookie_2, $sCookie, $sHeader, $sHtmlProfile

    $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $oHTTP.Open('POST', 'http://login.vk.com/?act=login')
    $oHTTP.setTimeouts(5000, 5000, 15000, 15000)
    $oHTTP.SetRequestHeader('Accept-Language', 'ru')
    $oHTTP.SetRequestHeader('Referer', 'http://vkontakte.ru')
    $oHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    $oHTTP.SetRequestHeader('User-Agent', 'AutoIt')
    $oHTTP.SetRequestHeader('Host', 'login.vk.com')
    $oHTTP.SetRequestHeader('Proxy-Connection', 'Keep-alive')
    $oHTTP.Send('act=login&q=1&al_frame=1&expire=&captcha_sid=&captcha_key=&from_host=vkontakte.ru&email=' & $sEmailUser & '&pass=' & $sPassUser)
    If $iEventError Then
        Return SetError($iEventError)
    EndIf
    $oHTTP.WaitForResponse
    $sHeader = $oHTTP.GetAllResponseHeaders
    If Not $sHeader Then
        Return SetError(1)
    EndIf
    $sCookie_1 = StringRegExpReplace($sHeader, '(?s).*?Set-Cookie: (remixchk=\d;\s)\w?.*', '\1')
    If @extended <> 1 Then
        Return SetError(1)
    EndIf
    $sCookie_2 = StringRegExpReplace($sHeader, '(?s).*?Set-Cookie: (remixsid=.*?);\s\w?.*', '\1')
    If @extended <> 1 Then
        Return SetError(1)
    EndIf
    $sCookie = $sCookie_1 & $sCookie_2
    If Not $sCookie Then
        Return SetError(1)
    EndIf
    $oHTTP.Open('GET', 'http://vkontakte.ru/app1979194')
    $oHTTP.SetRequestHeader('Cookie', $sCookie)
    $oHTTP.setTimeouts(5000, 5000, 15000, 15000)
    $oHTTP.SetRequestHeader('Accept-Language', 'ru')
    $oHTTP.SetRequestHeader('Referer', 'http://vkontakte.ru')
    $oHTTP.SetRequestHeader('Accept-Encoding', 'gzip, deflate')
    $oHTTP.SetRequestHeader('User-Agent', 'AutoIt')
    $oHTTP.SetRequestHeader('Host', 'vkontakte.ru')
    $oHTTP.SetRequestHeader('Pragma', 'no-cache')
    $oHTTP.Send('')
    If $iEventError Then
        Return SetError($iEventError)
    EndIf
    $oHTTP.WaitForResponse
    $sHtmlProfile = $oHTTP.ResponseText
    If Not $sHtmlProfile Then
        Return SetError(1)
    EndIf
$sId = StringRegExpReplace($sHtmlProfile, '(?s).*?id":(.*?),"?.*', '\1')
$sAuth = StringRegExpReplace($sHtmlProfile, '(?s).*?key":"(.*?)",?.*', '\1')
MsgBox(64, 'Info', 'ID: ' & $sId & @LF & 'Key: ' & $sAuth)
	Global $text = $sid&":"&$sauth

EndFunc   ;==>_GetUserProfile_VK

Func _WinHttpErrorHandler()
    $iEventError = $oWinHttpError.Number
EndFunc   ;==>_WinHttpErrorHandler
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
andreitrane
Попробуйте так:
Код:
;...
$sHtmlProfile = $oHTTP.ResponseText
$sHtmlProfile = BinaryToString($sHtmlProfile)
;...
Не надо.
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
madmasles


может я и правда что то с кодом намудрил, можете проверить?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
andreitrane
Меняю этот кусок
Код:
;...
$hFile = FileOpen($sFile, 2)
FileWrite($hFile, $Text)
FileClose($hFile)
MsgBox(64, 'OK', 'OK')
Exit
;на этот	
$sId = StringRegExpReplace($sText, '(?s).*?id":(.*?),"?.*', '\1')
$sAuth = StringRegExpReplace($sText, '(?s).*?key":"(.*?)",?.*', '\1')
MsgBox(64, 'Info', 'ID: ' & $sId & @LF & 'Key: ' & $sAuth)
;...
У меня все работает.
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
madmasles
получился такой код, но он выдает то ошибку 1, то символ, который на скрине сверху
Код:
Global $oWinHttpError, $iEventError = 0, _
        $sEmail = 'мыло', _
        $sPass = 'пароль', _
        $sText, $sFile = @ScriptDir & '\UserProfile.txt', $hFile


$oWinHttpError = ObjEvent('AutoIt.Error', '_WinHttpErrorHandler')

;$sText = FileRead(@ScriptDir&"\пакет.txt")
$sText = _GetUserProfile_VK($sEmail, $sPass)
If @error Then
    MsgBox(16, 'Error', @error)
    Exit
Else
$sId = StringRegExpReplace($sText, '(?s).*?id":(.*?),"?.*', '\1')
$sAuth = StringRegExpReplace($sText, '(?s).*?key":"(.*?)",?.*', '\1')
MsgBox(64, 'Info', 'ID: ' & $sId & @LF & 'Key: ' & $sAuth)

EndIf

Func _GetUserProfile_VK($sEmailUser, $sPassUser)
    Local $oHTTP, $sCookie_1, $sCookie_2, $sCookie, $sHeader, $sHtmlProfile

    $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $oHTTP.Open('POST', 'http://login.vk.com/?act=login')
    $oHTTP.setTimeouts(5000, 5000, 15000, 15000)
    $oHTTP.SetRequestHeader('Accept-Language', 'ru')
    $oHTTP.SetRequestHeader('Referer', 'http://vkontakte.ru')
    $oHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    $oHTTP.SetRequestHeader('User-Agent', 'AutoIt')
    $oHTTP.SetRequestHeader('Host', 'login.vk.com')
    $oHTTP.SetRequestHeader('Proxy-Connection', 'Keep-alive')
    $oHTTP.Send('act=login&q=1&al_frame=1&expire=&captcha_sid=&captcha_key=&from_host=vkontakte.ru&email=' & $sEmailUser & '&pass=' & $sPassUser)
    If $iEventError Then
        Return SetError($iEventError)
    EndIf
    $oHTTP.WaitForResponse
    $sHeader = $oHTTP.GetAllResponseHeaders
    If Not $sHeader Then
        Return SetError(1)
    EndIf
    $sCookie_1 = StringRegExpReplace($sHeader, '(?s).*?Set-Cookie: (remixchk=\d;\s)\w?.*', '\1')
    If @extended <> 1 Then
        Return SetError(1)
    EndIf
    $sCookie_2 = StringRegExpReplace($sHeader, '(?s).*?Set-Cookie: (remixsid=.*?);\s\w?.*', '\1')
    If @extended <> 1 Then
        Return SetError(1)
    EndIf
    $sCookie = $sCookie_1 & $sCookie_2
    If Not $sCookie Then
        Return SetError(1)
    EndIf
    $oHTTP.Open('GET', 'http://vkontakte.ru/app1979194')
    $oHTTP.SetRequestHeader('Cookie', $sCookie)
    $oHTTP.setTimeouts(5000, 5000, 15000, 15000)
    $oHTTP.SetRequestHeader('Accept-Language', 'ru')
    $oHTTP.SetRequestHeader('Referer', 'http://vkontakte.ru')
    $oHTTP.SetRequestHeader('Accept-Encoding', 'gzip, deflate')
    $oHTTP.SetRequestHeader('User-Agent', 'AutoIt')
    $oHTTP.SetRequestHeader('Host', 'vkontakte.ru')
    $oHTTP.SetRequestHeader('Pragma', 'no-cache')
    $oHTTP.Send('')
    If $iEventError Then
        Return SetError($iEventError)
    EndIf
    $oHTTP.WaitForResponse
    $sHtmlProfile = $oHTTP.ResponseText
	;$sHtmlProfile = BinaryToString($oHTTP.ResponseText)
    If Not $sHtmlProfile Then
        Return SetError(1)
    EndIf

EndFunc   ;==>_GetUserProfile_VK

Func _WinHttpErrorHandler()
    $iEventError = $oWinHttpError.Number
EndFunc   ;==>_WinHttpErrorHandler
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
andreitrane
Попробуйте тогда сначала записать в файл, а потом прочитать его и из прочитанного текста получить то, что Вам нужно.
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
madmasles
в том то и дело, что из файла читает на раз))) а вот из запроса отвечает ID 0 Key 0
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
madmasles
если ставить StringRegExpReplace не к самой функции, а к $sHtmlProfile, то срабатывает SetError(1), а это значит что нет $sHtmlProfile, может не срабатывает $oHTTP.ResponseText ??
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
andreitrane
Насколько я помню, в контакте не любит частые запросы. Попробуйте делать их с интервалом не меньше минуты, результат записывать во временный файл, читать его и парсить, а потом файл удалять.
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
madmasles
0_0 всетаки что то не так с
Код:
$sHtmlProfile = $oHTTP.ResponseText

посмотрите файл hash.txt, пока он не удалился, и увидите...

ничего! :shok:
Код:
Global $oWinHttpError, $iEventError = 0, _
        $sEmail = 'mail', _
        $sPass = 'pass', _
        $sText,  $hFile

$oWinHttpError = ObjEvent('AutoIt.Error', '_WinHttpErrorHandler')

;$sText = FileRead(@ScriptDir&"\пакет.txt")
$sText = _GetUserProfile_VK()
If @error Then
    MsgBox(16, 'Error', @error)
    Exit
Else
	$text = FileRead(@ScriptDir&"\hash.txt")
$sId = StringRegExpReplace($text, '(?s).*?id":(.*?),"?.*', '\1')
$sAuth = StringRegExpReplace($text, '(?s).*?key":"(.*?)",?.*', '\1')
MsgBox(64, 'Info', 'ID: ' & $sId & @LF & 'Key: ' & $sAuth)
FileDelete(@ScriptDir&"\hash.txt")

EndIf

Func _GetUserProfile_VK()
    Local $oHTTP, $sCookie_1, $sCookie_2, $sCookie, $sHeader, $sHtmlProfile

    $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $oHTTP.Open('POST', 'http://login.vk.com/?act=login')
    $oHTTP.setTimeouts(5000, 5000, 15000, 15000)
    $oHTTP.SetRequestHeader('Accept-Language', 'ru')
    $oHTTP.SetRequestHeader('Referer', 'http://vkontakte.ru')
    $oHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    $oHTTP.SetRequestHeader('User-Agent', 'AutoIt')
    $oHTTP.SetRequestHeader('Host', 'login.vk.com')
    $oHTTP.SetRequestHeader('Proxy-Connection', 'Keep-alive')
    $oHTTP.Send('act=login&q=1&al_frame=1&expire=&captcha_sid=&captcha_key=&from_host=vkontakte.ru&email=' & $sEmail & '&pass=' & $sPass)
    If $iEventError Then
        Return SetError($iEventError)
    EndIf
    $oHTTP.WaitForResponse
    $sHeader = $oHTTP.GetAllResponseHeaders
    If Not $sHeader Then
        Return SetError(1)
    EndIf
    $sCookie_1 = StringRegExpReplace($sHeader, '(?s).*?Set-Cookie: (remixchk=\d;\s)\w?.*', '\1')
    If @extended <> 1 Then
        Return SetError(1)
    EndIf
    $sCookie_2 = StringRegExpReplace($sHeader, '(?s).*?Set-Cookie: (remixsid=.*?);\s\w?.*', '\1')
    If @extended <> 1 Then
        Return SetError(1)
    EndIf
    $sCookie = $sCookie_1 & $sCookie_2
    If Not $sCookie Then
        Return SetError(1)
    EndIf
    $oHTTP.Open('GET', 'http://vkontakte.ru/app1979194')
    $oHTTP.setTimeouts(5000, 5000, 15000, 15000)
    $oHTTP.SetRequestHeader('Accept-Language', 'ru')
    $oHTTP.SetRequestHeader('Referer', 'http://vkontakte.ru')
    $oHTTP.SetRequestHeader('Accept-Encoding', 'gzip, deflate')
    $oHTTP.SetRequestHeader('User-Agent', 'AutoIt')
    $oHTTP.SetRequestHeader('Host', 'vkontakte.ru')
    $oHTTP.SetRequestHeader('Pragma', 'no-cache')
    $oHTTP.SetRequestHeader('Cookie', $sCookie)
    $oHTTP.Send('')
    If $iEventError Then
        Return SetError($iEventError)
    EndIf
    $oHTTP.WaitForResponse
    $sHtmlProfile = $oHTTP.ResponseText
	;$sHtmlProfile = BinaryToString($oHTTP.ResponseText)
    If Not $sHtmlProfile Then
        Return SetError(1)
    EndIf

	FileWrite(@ScriptDir&"\hash.txt", $sHtmlProfile)

EndFunc   ;==>_GetUserProfile_VK

Func _WinHttpErrorHandler()
    $iEventError = $oWinHttpError.Number
EndFunc   ;==>_WinHttpErrorHandler
 

focus

Осваивающий
Сообщения
69
Репутация
20
Код:
$text = FileRead(@ScriptDir&"\hash.txt")
пропущена буква s ($stext) и переменная не инициализирована. Давало ошибку. Я поменял - пошло. И ещё. В Get запросе может нужно ещё раз прописать
Код:
$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
. Тут я незнаю - могу ошибаться.
 
Автор
A

andreitrane

Новичок
Сообщения
141
Репутация
3
focus [?]
пропущена буква s ($stext) и переменная не инициализирована
все правильно, $sText это функция _GetUserProfile_VK(), в результате которой идет запись в файл @ScriptDir&"\hash.txt"
а вот переменная $text - это уже чтение из файла @ScriptDir&"\hash.txt", из которого надо и вытащить данные
focus [?]
может нужно ещё раз прописать Код: AutoIt [Выделить] $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1'). Тут я незнаю - могу ошибаться.
может быть
но тут дело совсем в другом, если смотреть через чарли, то видно что приходит ответ с нужной нам информацией, но в файл это не записывается, то есть тут какие то проблемы с $sHtmlProfile = $oHTTP.ResponseText
 

Guezt

Продвинутый
Сообщения
335
Репутация
81
Если еще актуально:
andreitrane [?]
0_0 всетаки что то не так сКод: AutoIt [Выделить]$sHtmlProfile = $oHTTP.ResponseTextпосмотрите файл hash.txt, пока он не удалился, и увидите...
не так с
Код:
$sHtmlProfile

в том что ты его объявил в функции локально -это раз. (добавь как глобальную переменную и не надо создавать временный файл.
везде разные vk.com и vkontakte.ru - это два.
ну и три: куки то тебе тут зачем?! (тут они тебе не надо, поверь ;) )
 
Верх