Что нового

Проблема с получением куков - The requested action with this object has failed.

Andrei7

Новичок
Сообщения
72
Репутация
3
Код:
#include<File.au3>
Global $logpass
$data=_FileReadToArray("рр.txt",$logpass)
if $data = 1 Then
$refd=FileExists(@ScriptDir & "info.txt")
		If $refd = 1 Then
	$filee=FileOpen("info.txt",2)
Else
	$filee=FileOpen("info.txt",1)
	EndIf

if @error > 0 Then
	MsgBox(0, "Ошибка","не найден файл рр.txt")
	Else
	for $cse=$logpass[0] to 1 step -1
	$razd=StringSplit($logpass[$cse],";")
	$login=$razd[1]
	$pass=$razd[2]
	autorizacion($login,$pass)

next
FileClose($filee)
EndIf
EndIf

	func autorizacion($login,$pass)
	$oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')
    $oHTTP.Open('GET', 'http://aaaaaaaaaa*') 
	$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
    $oHTTP.Send('')
    $oHTTP.WaitForResponse
    $sHTML = $oHTTP.ResponseText
    $sCookies = $oHTTP.GetResponseHeader('Set-Cookie') 
	;MsgBox(0,'',$sCookies)
	$ssCookies=StringRegExp($sCookies,"(JSESSIONID=.*?);",1)
	$oHTTP.Open('POST', 'http://aaaaaaaaaaa/bbbbbb')
	$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
	$oHTTP.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
	$oHTTP.Send('name='&$login&'&pass='&$pass&'&submit=%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F')
	$oHTTP.WaitForResponse
    global $sHTML = $oHTTP.ResponseText
	$oHTTP.Open('GET', 'httr://aaaaaaaaaa/ddddd')
    $oHTTP.Send('')
    $oHTTP.WaitForResponse
    $sHTML = $oHTTP.ResponseText
	$krab=StringRegExp($sHTML, "(?si)<div\sclass=.bottom.>\s*<h4>(.*?)</h4>",3)
	$rase=StringRegExp($sHTML, "(?si)<div\sclass=.bottom.>\s*<h4>.*?</h4>\s*<p>(.*?)</p>",3)
	$klass=StringRegExp($sHTML, "(?si)<div\sclass=.bottom.>\s*<h4>.*?</h4>\s*<p>.*?</p>\s*<p>(.*?)</p>",3)
	$pol=StringRegExp($sHTML, "(?si)<div\sclass=.bottom.>\s*<h4>.*?</h4>\s*<p>.*?</p>\s*<p>.*?</p>\s*<p>(.*?)</p>",3)
	$lvl=StringRegExp($sHTML, "(?si)<div\sclass=.bottom.>\s*<h4>.*?</h4>\s*<p>.*?</p>\s*<p>.*?</p>\s*<p>.*?</p>\s*<p>(.*?)</p>",3)
	$bal=StringRegExp($sHTML, "(?si)<div\sclass=.drahma.>.*?balance.>(.*?)<",1)
	if @error =0 Then

FileWriteLine($filee,$login&";"&$pass&@CRLF&"----------"&@CRLF&"блабла: "&$bal[0])
	dim $ad=0
	$t=UBound($krab)

	for $d=$t to 1 step -1
	$g=FileWriteLine($filee,$krab[$ad]&@CRLF&$rase[$ad]&@CRLF&$klass[$ad]&@CRLF&$pol[$ad]&@CRLF&$lvl[$ad]&@CRLF&"----------")
	$ad=$ad+1
next
FileWriteLine($filee,"_________________________________________________________")
EndIf
	EndFunc
код ошибки
Код:
C:\Documents and Settings\?????\??????? ????\ааа.au3 (40) : ==> The requested action with this object has failed.:
$sCookies = $oHTTP.GetResponseHeader('Set-Cookie')
$sCookies = $oHTTP.GetResponseHeader('Set-Cookie')^ ERROR
уже кароче всё перепробовал... работает нормально, и иногда, частенько эта ошибка вылазит. помогите пожалуста понять, в чем ошибка.


Почитал немного.Я так понимаю, что ошибка в том, что страница не догрузилась полностью, и не откуда куки выдергивать? Подскажите, как вставить задержку, чтобы стр. загрузилась полностью, а потом выдергивать куки...
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Скорее всего причина в редиректе - скрипт не успевает получить куки, как уже происходит перенаправление.
Попробуйте добавить:
Код:
$oHTTP.Option(6) = False

перед $oHTTP.Open
 
Автор
A

Andrei7

Новичок
Сообщения
72
Репутация
3
всё равно проблема осталась.
не подскажете, что это за опция, и где найти описание всех этих опций... :shok:


проблема вроде решилась добавлением паузы в 5 сек так -
Код:
func autorizacion($login,$pass)
;тут код

FileWriteLine($filee,"_________________________________________________________")
EndIf
$oHTTP=0
sleep(5000)
    EndFunc
но хотелось бы знать, можно ли без паузы как нибудь это сделать? и вот например, как ждать полной загрузки страницы через $oHTTP.Open, ну или вот смотрел только что, если сайт подлагивает, то скрипт просто даёт ошибку... :(

Всё равно вылазит. я уже и на проверку на доступность к сайту поставил, думал, что это сайт лагает... а нет. Помогите пожалуста. Уже всё перерыл, и ничего толкового не нашёл.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Эта опция отключает авторедирект. Значения опций нужно искать вот нашел кое-что.

После логина на многих серверах происходит регенерация сессии, для защиты от фиксаций
PHP:
session_regenerate_id(True);
А после регенерации может идти редирект на домашнюю или др. страницу, и winhttp следует по редиректу, не успев поймать куки. Сам с этим столкнулся на своем же тестовом сервере :D , но мне выключение этой опции помогло.
Если сервер лагает, то можно попробовать увеличить значения таймаутов.
Можно попробовать получать все заголовки $oHTTP.GetAllResponseHeaders(), т.к. иногда куков бывает очень много и все не попадают в одну строку set-cookie и таких строк делается несколько, а $oHTTP.GetResponseHeader('Set-Cookie') берет только первую куку.
А лучше всего включить в браузере слежение за заголовками, залогиниться вручную и рассматривать весь процесс пошагово - что и как делает браузер. Для FireFox - HTTPFox.
Коды http.
Еще можно попробовать работать через чистый TCP - как часто делает Creator - это исключает падения при ошибках объекта winhttp.
Можно использовать это или чистый _IE :smile:
Способов множество, пользуйтесь.
 
Автор
A

Andrei7

Новичок
Сообщения
72
Репутация
3
я реализовал всё по другому. отключил выдергивание этих куков... теперь winhttp сам куки принимает, и сам передаёт, и не нужно ему
Код:
$sCookies = $oHTTP.GetResponseHeader('Set-Cookie')
ну и пробовал $oHTTP.GetAllResponseHeaders(), тоже ошибки давало. Всё работает теперь нормально, но пауза в 5 сек. осталась. возможно надо использовать другое чет , а не winhttp. а заголовки я смотрю через сниффер :smile:
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Andrei7 [?]
теперь winhttp сам куки принимает, и сам передаёт

Как вам это удалось? :shok:

По поводу winhttp, есть еще такой компонент, как MSXML2.XMLhttp
Код:
$oHTTP = ObjCreate('MSXML2.XMLhttp.3.0')
$sUrl = 'www.autoit-script.ru'
$oHTTP.Open('GET', $sUrl)
$oHTTP.Send('')
$sHTML = $oHTTP.responseText
$sHeaders = $oHTTP.GetAllResponseHeaders()
ConsoleWrite($sHeaders & @CRLF)
ConsoleWrite($sHTML & @CRLF)

Отличия у них минимальны, в заголовках например
 
Автор
A

Andrei7

Новичок
Сообщения
72
Репутация
3
Как вам это удалось?
как? да вот мне тоже интересно, как???
вот сейчас снифером смотрю, если добавлять в заголовки еще куки, которые я вытаскиваю, то получается вот такая муть -
Код:
Cookie: PHPSESSID=5f474bf4b927a8b8445fa56b225b4cee; PHPSESSID=5f474bf4b927a8b8445fa56b225b4cee
тоесть, выходит, что winhttp сам уже шлёт куки... я вообще запутался.
 
Верх