Что нового

Авторизация на сайте посредством HTTP запросов

lexaSF

Новичок
Сообщения
182
Репутация
3
Версия AutoIt: последняя

Описание:
Нужно установить подключение к www.darkorbit.com, залогиниться по определенному логину\паролю и выбрать сервер.Причем все должно быть реализовано на уровне HTTP
Примечания:
Сам что-то не догоняю :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Посмотри внизу «Похожие темы».
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Пример авторизации:
Код:
$sRequestURL	= 'http://www.darkorbit.bigpoint.com'
$sLogin			= 'qwe'
$sPass			= '123'

; POST-запрос на сайт
$sSendData		= 'loginForm_default_username="' & $sLogin & '"&loginForm_default_password="' & $sPass & '"'
$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('POST', $sRequestURL)
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$oHTTP.SetRequestHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
$oHTTP.SetRequestHeader('Accept-Language', 'ru')
$oHTTP.SetRequestHeader('Referer', $sRequestURL)
$oHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
$oHTTP.SetRequestHeader('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')
$oHTTP.SetRequestHeader('Host', $sRequestURL)
$oHTTP.SetRequestHeader('Proxy-Connection', 'Keep-alive')
$oHTTP.Send($sSendData)
$oHTTP.WaitForResponse
$Response = $oHTTP.ResponseText

; запуск Блокнота и вставка результата POST-запроса
$hWin = WinGetHandle('[CLASS:Notepad]')
If $hWin == '' Then
	Run('notepad.exe')
	$hWin = WinWait('[CLASS:Notepad]')
EndIf
ControlSetText($hWin, '', 'Edit1', $Response)
WinActivate($hWin)

; проверка авторизации
If StringInStr($Response, 'Данное имя пользователя и/или пароль некорректны') Then
	MsgBox(16, 'Ошибка', 'Данное имя пользователя и/или пароль некорректны')
Else
	MsgBox(64, 'Внимание', 'Авторизация пройдена')
EndIf
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
Авторизация на сайте посредством HTTP

Версия AutoIt: Последняя

Описание:
Требуется выбрать сервер в онлайн игре www.darkorbit.com.
Сам пробовал - ничего не вышло из за отсутствия знаний.

Примечания:
Есть скрипт авторизации, к нему нужно добавить выбор сервера по HTTP
Вот часть скрипта:
Код:
$sRequestURL    = 'http://www.darkorbit.bigpoint.com'
$sLogin         = 'Test2212'
$sPass          = '1111'

; POST-запрос на сайт
$sSendData      = 'loginForm_default_username=' & $sLogin & '&loginForm_default_password=' & $sPass
$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
$oHTTP.Open('POST', $sRequestURL)
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$oHTTP.SetRequestHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
$oHTTP.SetRequestHeader('Accept-Language', 'ru')
$oHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
$oHTTP.SetRequestHeader('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')
$oHTTP.SetRequestHeader('Host', $sRequestURL)
$oHTTP.SetRequestHeader('Proxy-Connection', 'Keep-alive')
$oHTTP.Send($sSendData)
$oHTTP.WaitForResponse
$Response = $oHTTP.ResponseText


$stringHTTP = StringSplit($Response,'<a class="verweis" href="http://ru1.darkorbit.bigpoint.com/GameAPI.php?',1) ; так как там постоянно новый sign, reg, ищем в исходном коде свежие
$StrMID = StringSplit($stringHTTP[2],'><div id="ini_2"',1)
$rer = '/GameAPI.php?' & $StrMID[1] ; вот весь запрос который я хотел послать
$ret = StringTrimRight($rer,1)

$oHTTP.Open('POST', $sRequestURL) ; Вот здесь я посылаю запрос сервреру на выбор сервера ру1. (не работает)
$oHTTP.SetRequestHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
$oHTTP.SetRequestHeader('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')
$oHTTP.SetRequestHeader('Host', 'www.ru1.bigpoint.darkorbit.com)')
$oHTTP.SetRequestHeader('Referer', 'http://www.darkorbit.com/?locale=ru&aid=333&aip=')
$oHTTP.Send($ret)
$oHTTP.WaitForResponse
$Response2 = $oHTTP.ResponseText

; запуск Блокнота и вставка результата POST-запроса
$hWin = WinGetHandle('[CLASS:Notepad]')
If $hWin == '' Then
    Run('notepad.exe')
    $hWin = WinWait('[CLASS:Notepad]')
EndIf
ControlSetText($hWin, '', 'Edit1', $Response2)
WinActivate($hWin)

; проверка авторизации
If StringInStr($Response, 'Данное имя пользователя и/или пароль некорректны') Then
    MsgBox(16, 'Ошибка', 'Данное имя пользователя и/или пароль некорректны')
Else
    MsgBox(64, 'Внимание', 'Авторизация пройдена')
EndIf
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Код:
Opt('MustDeclareVars',		1)

Global	$sLogin, $sPass
		$sLogin	= 'Proxy_'
		$sPass	= 'qwe1231353'

Local	$sResponse, $sServerLink


; Авторизация
$sResponse = _HttpRequest('http://www.darkorbit.bigpoint.com', 'loginForm_default_username=' & $sLogin & '&loginForm_default_password=' & $sPass)
;_Notepad($sResponse)
If StringInStr($sResponse, 'Данное имя пользователя и/или пароль некорректны') Then
    MsgBox(16, 'Ошибка', 'Данное имя пользователя и/или пароль некорректны')
	Exit
Else
    MsgBox(64, 'Внимание', 'Авторизация успешно пройдена')
EndIf
; <== Авторизация

; Выбор сервера
$sServerLink = StringRegExpReplace($sResponse, '(?s)(?i).+?<div id="instance_574".+?<a class="verweis" href="(.+?)">.+', '\1')
$sResponse = _HttpRequest($sServerLink, '', 'GET')
;_Notepad($sResponse)
If Not StringInStr($sResponse, 'ДОБРО ПОЖАЛОВАТЬ, КОСМИЧЕСКИЙ ПИЛОТ') Then
    MsgBox(16, 'Ошибка', 'Ошибка выбора сервера')
	Exit
Else
    MsgBox(64, 'Внимание', 'Сервер успешно выбран')
EndIf
; <== Выбор сервера

Func _HttpRequest($sRequestURL, $sSendData, $sType='POST')
	If $sType == 'GET' AND $sSendData <> '' Then
		$sRequestURL &= '?' & $sSendData
		$sSendData = ''
	EndIf
	Local $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
	$oHTTP.Open($sType, $sRequestURL)
	$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
	$oHTTP.SetRequestHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')
	$oHTTP.SetRequestHeader('Accept-Language', 'ru')
	$oHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
	$oHTTP.SetRequestHeader('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')
	$oHTTP.SetRequestHeader('Host', $sRequestURL)
	$oHTTP.SetRequestHeader('Proxy-Connection', 'Keep-alive')
	$oHTTP.Send($sSendData)
	$oHTTP.WaitForResponse
	Return $oHTTP.ResponseText
EndFunc

Func _Notepad($sText)
	Local $hWin = WinGetHandle('[CLASS:Notepad]')
	If $hWin == '' Then
		Run('notepad.exe')
		$hWin = WinWait('[CLASS:Notepad]')
	EndIf
	ControlSetText($hWin, '', 'Edit1', $sText)
	WinActivate($hWin)
EndFunc
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
Сделал, заработало, спасибо.
Только первый раз вижу функцию _HttpRequest.Ято это за функция?
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Это очевидно, Ватсон, раскомментировать строку:
Код:
;_Notepad($sResponse)
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
да, я понял уже. Еще один вопрос: как вы узнали что нудно отправить серверу? откуда взялось "(?s)(?i).+?<div id="instance_574".+?<a class="verweis" href="(.+?)">.+'", такого в коде страницы вроде нету, но как то работает.
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
lexaSF сказал(а):
да, я понял уже. Еще один вопрос: как вы узнали что нудно отправить серверу? откуда взялось "(?s)(?i).+?<div id="instance_574".+?<a class="verweis" href="(.+?)">.+'", такого в коде страницы вроде нету, но как то работает.
Почитай в справке про функцию
Код:
StringRegExpReplace

Это совего рода маска для запроса...
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
lexaSF
Это получение ссылки выбора сервера. Т.к. от каждого захода в игру эта ссылка меняется, в нее записываются данные сессии и т.д. Соответственно, каждый раз необходимо брать ее из HTML.
Кстати, именно поэтому, вы получали ответ просто строчку, а не HTML страницы.
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
я знаю, но откуда взялась эта строчка? разве такая вообще есть? я что то не видел, и вообще думал что надо другие данные отправлять.как вы узнали что именно отсылать надо?
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
lexaSF, Viktor217 Вам уже ответил. Это называется "pattern" регулярного выражения.
 
Автор
L

lexaSF

Новичок
Сообщения
182
Репутация
3
Вы меня совсем запутали) :wacko: Странный запрос получается...Вы его из HTML высматривали?или отлавливали?
 
Верх