Что нового

[Сеть, интернет] Помогите с Выводом ответа на POST запрос.

astati

Новичок
Сообщения
145
Репутация
4
Привет всем!
Я бы не написал если бы не возникла проблема. Забыл пас от мыла на mail.ru(а мобила не подключена к меилу - старый аккаунт, про вопросы вообще молчу :smile:)
Решил написать POST запрос и вроде все норм, но вот беда. Я не вижу правильно ли я ответил на секретный вопрос или нет.

Вопрос: Как сделать так чтобы если при проверке сервера ответ правильный, то выводилось Об этом сообщение на Экран?
Эт мой POST запрос.
Код:
$sDomain = 'MAIL.RU' ;домен или ip-адрес
$iPort = 80 ;порт
$sParameters = 'action=answer&Username=XXX&Domain=mail.ru&Submit_PasswordAnswer=1&answer=***'

;Запрос, который будет отправлен серверу
$sRequest = 'POST /cgi-bin/passremind HTTP/1.1' & @CRLF ;Request-строка
$sRequest &= 'Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, 

application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*' & @CRLF
$sRequest &= 'Referer: http://e.mail.ru/cgi-bin/passremind' & @CRLF
$sRequest &= 'Accept-Language: ru-RU' & @CRLF
$sRequest &= 'User-Agent: IE' & @CRLF ;au3browser' & @CRLF
$sRequest &= 'Content-Type: application/x-www-form-urlencoded' & @CRLF ;
$sRequest &= 'Accept-Encoding: gzip, deflate' & @CRLF
$sRequest &= 'Host: e.mail.ru' & @CRLF
$sRequest &= 'Content-Length: ' & StringLen($sParameters) & @CRLF
$sRequest &= 'Connection: Keep-Alive' & @CRLF
$sRequest &= 'Cache-Control: no-cache' & @CRLF
$sRequest &= @CRLF ;Заголовки от параметров отделяет пустая строка
$sRequest &= $sParameters ;Параметры в запросе

If TCPStartup() = 0 Then ;запускаем TCP/UDP-службы
    MsgBox(16, 'Ошибка', 'Не удалось запустить TCP/UDP-службы.')
    Exit 1
EndIf

$sIP = TCPNameToIP($sDomain) ;получаем ip-адрес

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

$iSocket = TCPConnect($sIP, $iPort) ;соединяемся с сервером

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

TCPSend($iSocket, $sRequest) ;отправляем сообщение

If @error Then
    MsgBox(16, 'Ошибка', 'Не удалось отправить запрос.')
    Exit 4
EndIf
	Sleep(1000)
	ProgressSet( 33, "Этап 1. Регистрация Аккаунта")
	
$sData = ''
$iTimer = TimerInit() ;запускаем таймер

Do
    $sBuffer = TCPRecv($iSocket, 1024) ;получаем часть сообщения сервера
    $iError = @error
    If Not $sBuffer = '' Then ;если удалось получить сообщение
        $sData &= $sBuffer ;сохраняем полученное сообщение
        $iTimer = TimerInit() ;обнуляем таймер
    EndIf
Until $iError <> 0 Or TimerDiff($iTimer) > 5000 ;если при получении сообщения произошла ошибка (данные получены, соединение закрыто) или в течении 5 секунд ничего не было получено, выход из цикла

TCPCloseSocket($iSocket)
TCPShutdown()

$aData = StringRegExp($sData, '(?s)(.*?)\r\n\r\n(.*)', 3) ;отделяем http-заголовки от тела сообщения ('заголовки' & @CRLF & @CRLF & 'тело')

;If @error Then
   ;MsgBox(16, 'Ошибка', 'Полученные данные неверны.')
;   MsgBox(16, 'Создание завершено', 'Идет подтверждение.')
;    Sleep(100)
	;Exit 5
;EndIf

вместо
XXX- мой логин,
*** - мой ответ.

P.S. Если надо что-то еще скажите.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Попробуйте так:
Код:
$sUsername	= "username"
$sDomain	= "mail.ru"
$sAnswer	= "word"

_POSTMailRu($sDomain, $sUsername, $sAnswer)

Func _POSTMailRu($s_Domain, $s_Username, $s_Answer)
	$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
	$oHTTP.Open("POST", "http://e.mail.ru/cgi-bin/passremind")
	$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
	$oHTTP.SetRequestHeader("Accept", "image/jpeg," & _
									  "application/x-ms-application," & _
									  "image/gif," & _
									  "application/xaml+xml," & _
									  "image/pjpeg," & _
									  "application/x-ms-xbap," & _
									  "application/vnd.ms-excel," & _
									  "application/vnd.ms-powerpoint," & _
									  "application/msword," & _
									  "*/*")
	$oHTTP.SetRequestHeader("Accept-Language", "ru-RU")
	$oHTTP.SetRequestHeader("Referer","http://e.mail.ru/cgi-bin/passremind")
	$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","e.mail.ru")
	$oHTTP.SetRequestHeader("Proxy-Connection", "Keep-alive")
	$oHTTP.SetRequestHeader("Connection","Keep-Alive")
	$oHTTP.SetRequestHeader("Cache-Control","no-cache")
	$oHTTP.Send("?action=answer&Username=" & $s_Username & "&Domain=" & $s_Domain & "&Submit_PasswordAnswer=1&answer=" & $s_Answer)
	$oHTTP.WaitForResponse

	$s_ResponseText = $oHTTP.ResponseText
	ConsoleWrite($s_ResponseText & @CRLF)

	Return $s_ResponseText
EndFunc

Если запрос прошёл удачно, проанализируйте код страницы, на наличие фразы об удачной смене пароля.
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
Выдает следующую ошибку на строку 33 :
Код:
$s_ResponseText = $oHTTP.ResponseText


Ошибка:
The requested action with this object has failed
Запрашиваемое действие с этим объектом не удалось
 

andrywolf

Новичок
Сообщения
5
Репутация
0
http://autoit-script.ru/index.php?topic=7784.msg53051#msg53051

! у меня вопрос по autoit
пытаюсь отправить запрос по TCP но в ответ ни чего не приходит !!!

Текст запросов перехватил сниффером. Через браузер на оба запроса сервер отвечает исправно, а когда посылаю вручную с помощью кода представленого ниже, первый запрос присылает ответ а второй нет!

вот ссылка на мою тему:
http://autoit-script.ru/index.php/topic,8576.msg57851.html#msg57851
 
Верх