Что нового

[Сеть, интернет] Проблема при отправке сообщения в чат (POST/GET)

The Dream

Новичок
Сообщения
393
Репутация
3
В общем, уже неделю пытаюсь отправить сообщение в чат, но увы - никак.
Авторизуюсь, все хорошо, но дальше - никак.
Только для тех, кому самому интересно и есть время.. (просто кажется сама затея не из легких)

Мои наработки:
Код:
#include <ie.au3>
#include <file.au3>
#include <timers.au3>

#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <WindowsConstants.au3>

GUICreate("bizarre", 600, 400)
$edit = GUICtrlCreateEdit("", 0, 0, 600, 400, BitOR($ES_AUTOVSCROLL, $ES_READONLY))
$hEdit = GUICtrlGetHandle(-1)
GUISetState()
$sDomain = 'bizarre.kiev.ua' ;домен или ip-адрес
$iPort = 80 ;порт
$sParameters = 'name=aabbcc&pass=112233&color=0&sx=m&room=1-&room_I=I%2B&room_U=U%2B' ;Параметры

;Запрос, который будет отправлен серверу
$sRequest = 'POST /cgi-bin/ch/cht.pl HTTP/1.1' & @CRLF
$sRequest &= 'User-Agent: Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.10.289 Version/12.02' & @CRLF
$sRequest &= 'Host: bizarre.kiev.ua' & @CRLF
$sRequest &= 'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1' & @CRLF
$sRequest &= 'Accept-Language: uk-UA,uk;q=0.9,en;q=0.8' & @CRLF
$sRequest &= 'Accept-Encoding: gzip, deflate' & @CRLF
$sRequest &= 'Referer: http://bizarre.kiev.ua/ch/login.html' & @CRLF
$sRequest &= 'Content-Length: ' & StringLen($sParameters) & @CRLF
$sRequest &= 'Content-Type: application/x-www-form-urlencoded' & @CRLF & @CRLF
$sRequest &= $sParameters & @CRLF;Параметры в запросе

TCPStartup()

$sIP = TCPNameToIP($sDomain) ;получаем ip-адрес
$iSocket = TCPConnect($sIP, $iPort) ;соединяемся с сервером
TCPSend($iSocket, $sRequest) ;отправляем сообщение
$lo_ = ""
$allGet = ""
$uid = ""
$cid = ""


While 1
	$sBuffer = TCPRecv($iSocket, 1024) ;получаем часть сообщения сервера
	If $sBuffer <> "" Then
		$iLine =  _GUICtrlEdit_GetFirstVisibleLine($hEdit)
	GUICtrlSetData($edit, GUICtrlRead($edit) & @CRLF & $sBuffer)
	_GUICtrlEdit_LineScroll($edit, 0, $iLine)
	EndIf

	If $cid = "" And StringInStr($sBuffer, "Set-Cookie") Then ; получаем cid
		$___ = StringSplit($sBuffer, "cid=", 1)
		$______ = StringSplit($___[2], ";", 1)
		$cid = $______[1]
		MsgBox(16, 'cid', $cid)

	EndIf



	If $uid = "" And StringInStr($sBuffer, "uid='") Then ; получаем uid
		$___ = StringSplit($sBuffer, "uid='", 1)
		$______ = StringSplit($___[2], "';", 1)
		$uid = $______[1]
		MsgBox(16, 'uid', $uid)
	EndIf





	If $allGet <> "" And $lo_ <> "" Then

	EndIf


	If StringInStr($sBuffer, "<frame marginwidth=0 marginheight=0 scrolling=no src=about:blank name=inp></frameset>") Then
		MsgBox(16, '', 'отправляем')

		; тут якобы должны получить новые куки lo_ и потом отправить сообщение (но куки не приходят)
		$sRequest &= "GET /cgi-bin/ch/inp.pl?strm=y&uid=" & $uid & "&color=0&sx=m&room=1- HTTP/1.1" & @CRLF
		$sRequest &= "Accept: text/html, application/xhtml+xml, */*" & @CRLF
		$sRequest &= "Referer: http://bizarre.kiev.ua/cgi-bin/ch/cht.pl" & @CRLF
		$sRequest &= "Accept-Language: uk-UA" & @CRLF
		$sRequest &= "User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" & @CRLF
		$sRequest &= "Accept-Encoding: gzip, deflate" & @CRLF
		$sRequest &= "Host: bizarre.kiev.ua" & @CRLF
		$sRequest &= "Connection: Keep-Alive" & @CRLF
		$sRequest &= "Cookie: cid=" & $cid & @CRLF
		TCPSend($iSocket, $sRequest)




		$allGet = 1
	EndIf
	Sleep(50)




WEnd
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
The Dream
не страдайте извращениями, для работы с протоколом http уже давно все придумано. Есть winhttp (в виде com или dll) и wininet (в виде dll). Для них есть готовые UDF.
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
inververs

А если способ каким то образом сохранить cookie?


Добавлено:
Сообщение автоматически объединено:

С помощью winhttp получилось авторизоватся. Потом тоже нет


Код:
#include <ie.au3>
#include <file.au3>
#include <timers.au3>

#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <WindowsConstants.au3>
GUICreate("bizarre", 600, 400)
$edit = GUICtrlCreateEdit("", 0, 0, 600, 400, BitOR($ES_AUTOVSCROLL, $ES_READONLY))
GUISetState()


$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
EndFunc

$oRequest.Open('POST', 'http://bizarre.kiev.ua/cgi-bin/ch/cht.pl', 0) ;Создаём соеденение, указываем адрес страницы
$oRequest.SetRequestHeader('User-Agent', 'au3browser') ;Указываем заголовок User-Agent
$oRequest.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded') ;Указываем заголовок Content-Type (необходимо для POST-запроса (Content-Length указывается автоматически))
$oRequest.Send('name=aabbcc&pass=112233&color=0&sx=m&room=1-&room_I=I%2B&room_U=U%2B') ;отправляем запрос
$oRequest.WaitForResponse
$Response = $oRequest.ResponseText
$headers = $oRequest.GetAllResponseHeaders()


GUICtrlSetData($edit, $Response)
GUICtrlSetData($edit, GUICtrlRead($edit) & @CRLF & $headers)



$cid = get_CID($headers)

Func get_CID($data)

        $___ = StringSplit($data, "cid=", 1)
        $______ = StringSplit($___[2], ";", 1)
        Return $______[1]
EndFunc



MsgBox(16,'',$cid)



Добавлено:
Сообщение автоматически объединено:

Но такой запрос выдает ошибку

Код:
$oRequest.Open('GET', "http://bizarre.kiev.ua/cgi-bin/ch/inp.pl?strm=y&uid=" & $cid & "&color=0&sx=m&room=1- HTTP/1.1", 0) ;Создаём соеденение, указываем адрес страницы
$oRequest.SetRequestHeader('Host', 'bizarre.kiev.ua') ;Указываем заголовок User-Agent
$oRequest.SetRequestHeader('Referer', 'http://bizarre.kiev.ua/cgi-bin/ch/cht.pl') ;Указываем заголовок User-Agent
$oRequest.SetRequestHeader('User-Agent', 'au3browser') ;Указываем заголовок User-Agent
$oRequest.SetRequestHeader('Cookie'," cid=" & $cid) ;Указываем заголовок User-Agent
$oRequest.WaitForResponse
$Response = $oRequest.ResponseText
$headers = $oRequest.GetAllResponseHeaders()



Добавлено:
Сообщение автоматически объединено:

ребята, помогите пожалуйста.. :stars: :stars: :stars:
 
Верх