Что нового

Авторизация на сайте с помощью winhttprequest

maxd2007

Новичок
Сообщения
89
Репутация
0
Здравствуйте. Поискав по форуму примеры авторизации на сайте с помощью WinHttp.WinHttpRequest.5.1 наткнулся на казалосьбы понятный и исчерпывающий пример от "CreatoR" http://autoit-script.ru/index.php/topic,3925.15.html#post_inet_3 , а именно:
Код:
$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1') ;Создаём COM-объект

If @error Then
    MsgBox(16, 'Ошибка', 'Ошибка при создании объекта "WinHttp.WinHttpRequest.5.1".')
    Exit 1
EndIf

$oErrorHandler = ObjEvent('AutoIt.Error', 'ErrorFunc') ;Создаём обработчик ошибок (COM Error Handling http://www.autoitscript.com/autoit3/docs/intro/ComRef.htm)

Func ErrorFunc()
    MsgBox(16, 'Ошибка', $oErrorHandler.description)
    Exit 2
EndFunc

$oRequest.Open('POST', 'http://localhost/test/post.php', 0) ;Создаём соеденение, указываем адрес страницы
$oRequest.SetRequestHeader('User-Agent', 'au3browser') ;Указываем заголовок User-Agent
$oRequest.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded') ;Указываем заголовок Content-Type (необходимо для POST-запроса (Content-Length указывается автоматически))
$oRequest.Send('param1=value1&param2=value2') ;отправляем запрос
$sData = $oRequest.ResponseText

$oErrorHandler = 0 ;выключаем обработчик ошибок

MsgBox(0, 'Data', $sData)

Попробовал его переделать под свои задачи вот таким образом:

Код:
$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1') 

If @error Then
    MsgBox(16, 'Ошибка', 'Ошибка при создании объекта "WinHttp.WinHttpRequest.5.1".')
    Exit 1
 EndIf

 $oErrorHandler = ObjEvent('AutoIt.Error', 'ErrorFunc')

 Func ErrorFunc()
    MsgBox(16, 'Ошибка', $oErrorHandler.description)
    Exit 2
 EndFunc

 $oRequest.Open('POST', 'http://nuvi.ru/private/', 0) 
 $oRequest.SetRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0')
 $oRequest.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
 $oRequest.Send('USER_LOGIN=Login&USER_PASSWORD=password')
 $sData = $oRequest.ResponseText

 $oErrorHandler = 0 

FileWrite ( "C:\1\PostTest.txt", $sData )
Но в конечном итоге все равно получаю страницу авторизации, подскажите в чем моя ошибка?

PS
Единственное что я не совсем понимаю это метод SetRequestHeader - я так понимаю что в User-Agent мы указываем тип браузера, а в content-type мы указываем форму авторизации. Если не сложно могли бы пояснить еще прав ли я или я неправильно понял?
 
Автор
M

maxd2007

Новичок
Сообщения
89
Репутация
0
inververs сказал(а):
Про куки что нибудь слышали?
Ну только то что это временные фаилы которые хранят пользовательские данные (типа логинов, паролей и всякой доп информации по сайту которую оставил пользователь), так же видел что на некоторых сайтах алгоритм должен быть такой:
1) Посылаю запрос
2) Выдераю куки
3) Заполняю форму
4) Добавляю куки в заголовок
5) Отправляю POST запрос
Но как узнать нужны куки при регистрастрации или нет я не нашел =(
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Обычно, нужно зайти GET на страницу с формой, тебе присылают куки, вторым запросом в этой же сессии ты отсылаешь POST логин и пароль. Смотри вкладку Netword в Developer Tools браузера.

И лучше не через $oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1') , делать т.к он автоматически куки не хранит. Придется вручную с ними возиться.
Посмотри в подписи у меня библиотека WinHttp UDF, для нее есть даже справка. Она будет получше. Все работу с куками она берет на себя.
 
Автор
M

maxd2007

Новичок
Сообщения
89
Репутация
0
inververs сказал(а):
Обычно, нужно зайти GET на страницу с формой, тебе присылают куки, вторым запросом в этой же сессии ты отсылаешь POST логин и пароль. Смотри вкладку Netword в Developer Tools браузера.

И лучше не через $oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1') , делать т.к он автоматически куки не хранит. Придется вручную с ними возиться.
Посмотри в подписи у меня библиотека WinHttp UDF, для нее есть даже справка. Она будет получше. Все работу с куками она берет на себя.
Я пробовал на примере все того же "CreatoR" все по той же ссылке, вот так:

Код:
#include "WinHttp.au3"

$hOpen = _WinHttpOpen('au3browser') ;инициализируем использование WinHTTP-функций, указываем заголовок User-Agent

If @error Then
    MsgBox(16, 'Ошибка', 'Не удалось инициализировать использование WinHttp-функций.')
    Exit 1
EndIf

$hConnect = _WinHttpConnect($hOpen, 'http://nuvi.ru') ;создаём соеденение, указываем только домен/ip-адрес

If @error Then
    MsgBox(16, 'Ошибка', 'Не удалось создать соеденение.')
    Exit 2
EndIf

$sData = _WinHttpSimpleRequest($hConnect, 'POST', 'private', Default, 'USER_LOGIN=login&USER_PASSWORD=pass') ;отправляем запрос, указываем его метод, адрес страницы без домена и параметры

If @error Then
    MsgBox(16, 'Ошибка', 'Не удалось отправить сообщение.')
    Exit 3
EndIf

_WinHttpCloseHandle($hConnect)
_WinHttpCloseHandle($hOpen)

;MsgBox(0, 'Data', $sData)

FileWrite ( "C:\1\NewTest.txt", $sData)
Но результат тот же =(
 
Верх