Что нового

Не получается войти на сайт (WinHTTP)

COBALT51

Новичок
Сообщения
3
Репутация
0
Не получается войти правильно на сайт (( посоветуйте,в чем дело может быть ((

Код:
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("POST","http://login.vk.com/?act=login")
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$oHTTP.SetRequestHeader("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*")
$oHTTP.SetRequestHeader("Accept-Language", "ru")
$oHTTP.SetRequestHeader("Referer","http://vkontakte.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","login.vk.com")
$oHTTP.SetRequestHeader("Proxy-Connection", "Keep-alive")
$oHTTP.Send('login=USERTEST&pass=PASSTEST&expire=&vk=')
$oHTTP.WaitForResponse
$resp=$oHTTP.ResponseText
$oIE = _IECreate()
_IEDocWriteHTML ($oIE, $oHTTP.ResponseText)
 

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
WinHttp.WinHttpRequest используется, чтобы загрузить и работать с данными со страницы не отображая их. Если Вам в IE нужно авторизоваться, то это делается с помощью IE.au3
Для обоих случаев тут навалом примеров, если использовать поиск.
 
Автор
C

COBALT51

Новичок
Сообщения
3
Репутация
0
Дело в том,что мне нужно зайти на сайт и потом страничку с профилем загрузить и отобразить в IE ,А зайти нужно без IE , с помощью запросов
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
COBALT51 [?]
Дело в том,что мне нужно зайти на сайт и потом страничку с профилем загрузить и отобразить в IE ,А зайти нужно без IE , с помощью запросов
Ну, начнём с того, что это (боюсь ошибиться) практически невозможно.
Вы хотите авторизироваться, используя один процесс, а потом продолжать работать, используя другой процесс.
Чтобы было проще понять, авторизируйтесь в FF, а работать продолжайте в IE и посмотрите, что с этого получится!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Garrett
А почему нельзя? Там(vkontakte.ru) сейчас поменялась схема авторизации, так что не проверял сейчас, а раньше я делал так: посылал запрос на авторизацию, парсил из полученного ответа куки, посылал запрос с куками на адрес профиля, полученный ответ сохранял в файл.htm и открывал его в IE. Картинок не было, но текст весь был на месте и по ссылкам можно было переходить.
Делал по этому примеру от r35p3ct.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
madmasles [?]
посылал запрос на авторизацию, парсил из полученного ответа куки, посылал запрос с куками на адрес профиля, полученный ответ сохранял в файл.htm и открывал его в IE
Ну, если только так! Согласен.
Только к чему такие сложности?
vkontakte.ru есть свой API, берём и пользуемся :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Garrett [?]
vkontakte.ru есть свой API
Если Вам не трудно, можно пример, а то у меня с этим ну очень сложно. :smile:
Сейчас проделал все то, о чем писал в предыдущем посте, все работает, только куки надо вынимать не из $oHTTP.ResponseText, а из $oHTTP.GetAllResponseHeaders.
Только к чему такие сложности?
А мне сам процесс интересен. :whistle: ;)
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Стоп, стоп, если же, все таки, необходимо в итоге "отобразить в IE", то можно же открыть окно IE в скрытом режиме, авторизоваться, и после отобразить окно.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
madmasles [?]
а из $oHTTP.GetAllResponseHeaders.
Или так $oHTTP.GetResponseHeader('Set-Cookie')

А мне сам процесс интересен.
Согласен :smile:

Если Вам не трудно, можно пример, а то у меня с этим ну очень сложно
Как такового примера готового у меня нет, потому как и "контакта" у меня нет ;D
Однако, судя по тому, какой интерес это вызывает в сообществе, пожалуй, нужно будет завести (сугубо для тестов API).
На данный момент могу помочь ссылкой на документацию.

API для Desktop-приложений
Авторизация Desktop-приложений (vkontakte.ru)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Garrett [?]
Или так $oHTTP.GetResponseHeader('Set-Cookie')
Так отдает у меня только первую строку с куками, а там их две.
За ссылку спасибо, надо посмотреть.

COBALT51,
Мне кажется, что `p r o x y предложил для Вас самый оптимальный вариант.
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Если не смущают звукли кликов IE то:
Код:
#include <IE.au3>

Opt('MustDeclareVars',		1)
Opt('TrayIconDebug',		1)

HotKeySet('{ESC}', '_Exit')

_VK_Login('e-mail', 'password')
If @error Then MsgBox(16, 'Авторизация', 'Ошибка авторизации: ' & @TAB & @error & @CRLF & 'Ошибка функции: ' & @TAB & @TAB & @extended)

Func _VK_Login($sEmail, $sPass, $iHide=1)
	Local $oIE, $oLoginForm, $oEmail, $oPass

	$oIE 		= _IECreate('http://vkontakte.ru', 0, 0)
	If @error Then
		SetError(1, @error)
		Return 0
	EndIf

	$oLoginForm = _IEFormGetObjByName($oIE, 'login')
	If @error Then
		SetError(2, @error)
		Return 0
	EndIf

	$oEmail 	= _IEFormElementGetObjByName($oLoginForm, 'email')
	If @error Then
		SetError(3, @error)
		Return 0
	EndIf

	$oPass 		= _IEFormElementGetObjByName($oLoginForm, 'pass')
	If @error Then
		SetError(4, @error)
		Return 0
	EndIf

	_IEFormElementSetValue($oEmail, $sEmail)
	If @error Then
		SetError(5, @error)
		Return 0
	EndIf

	_IEFormElementSetValue($oPass, $sPass)
	If @error Then
		SetError(6, @error)
		Return 0
	EndIf

	_IEFormSubmit($oLoginForm)
	If @error Then
		SetError(5, @error)
		Return 0
	EndIf


	If $iHide Then _IEAction($oIE, 'visible')
	If @error Then
		SetError(6, @error)
		Return 0
	EndIf

	SetError(0, 0)
	Return 1
EndFunc

Func _Exit()
	Exit
EndFunc
 
Автор
C

COBALT51

Новичок
Сообщения
3
Репутация
0
нет,нет,нужно както без IE !
Можно просто авторизоватся и потом чтобы както было доказательство тому что все успешно прошло
 

СOBALT51

Новичок
Сообщения
2
Репутация
0
ну помогите плиз,не получается зайти и еще сложно просто потом стянуть исходный код например в файл текстовый

тоесть логинюсь и потом сохраняю исходный код страницы www.vkontakte.ru в txt файл
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
СOBALT51
Попробуйте так:
Код:
Global $oWinHttpError, $iEventError = 0, _
		$sEmail = 'Ваш e-mail', _
		$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, $sText)
	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('POST', 'http://vkontakte.ru/profile.php')
	$oHTTP.SetRequestHeader('Cookie', $sCookie)
	$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
	$oHTTP.SetRequestHeader('Accept-Language', 'ru')
	$oHTTP.SetRequestHeader('Referer', 'http://login.vk.com/?act=login')
	$oHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
	$oHTTP.SetRequestHeader('User-Agent', 'AutoIt')
	$oHTTP.SetRequestHeader('Host', 'vkontakte.ru')
	$oHTTP.SetRequestHeader('Proxy-Connection', 'Keep-alive')
	$oHTTP.Send('')
	If $iEventError Then
		Return SetError($iEventError)
	EndIf
	$oHTTP.WaitForResponse
	$sHtmlProfile = $oHTTP.ResponseText
	If Not $sHtmlProfile Then
		Return SetError(1)
	EndIf
	Return SetError(0, 0, $sHtmlProfile)
EndFunc   ;==>_GetUserProfile_VK

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

filippok,
*click*.
 
Верх