- Автор темы
- Добавить закладку
- #21
Пожалуйста, обратите внимание, что пользователь заблокирован
Ragnar, trueslowmo спасибо за ответы, все получилось.
Еще хотел спросить по WinInet:
Каким образом можно отследить, что все куки получены? Есть код, все работает, куки получаются с помощью функции HttpQueryInfo. В мсдн написано, что переменная cnt (последний параметр вышеупомянутой функции) служит для счетчика одноименных заголовков, и когда их больше нет, возвращает ERROR_HTTP_HEADER_NOT_FOUND. Но такого не происходит, счетчик тупо доходит до 15 и все. Почему так? Возможно, я что-то не так понял в мсдн из-за языкового барьера.
Еще хотел спросить по WinInet:
Каким образом можно отследить, что все куки получены? Есть код, все работает, куки получаются с помощью функции HttpQueryInfo. В мсдн написано, что переменная cnt (последний параметр вышеупомянутой функции) служит для счетчика одноименных заголовков, и когда их больше нет, возвращает ERROR_HTTP_HEADER_NOT_FOUND. Но такого не происходит, счетчик тупо доходит до 15 и все. Почему так? Возможно, я что-то не так понял в мсдн из-за языкового барьера.
Код:
.486
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\macros\macros.asm
uselib kernel32, masm32, user32,wininet
.data
szData db 1024 dup(0)
host db "www.test.ru",0
postdata db "log=admin&pwd=666999&wp-submit=Log+In&redirect_to=http%3A%2F%2Ftest.ru%2Fwp-admin%2F&testcookie=1",0
headers db 13,10,"Keep-Alive: 115",
13,10,"Connection: keep-alive",
13,10,"Content-Type: application/x-www-form-urlencoded",0
.data?
hInternet dd ?
hConnect dd ?
hRequest dd ?
bSend dd ?
hFile dd ?
dwBytesRead dd ?
bRead dd ?
bwr dd ?
.code
main PROC
call cookies
invoke ExitProcess,0
main ENDP
cookies PROC
local cook[2048]:byte
local cookS:dword;
local cnt:dword
mov cnt,0
mov hInternet,FUNC(InternetOpen,chr$("WinInet Test"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0)
.if hInternet==NULL
invoke MessageBox,0,chr$("InternetOpen error"),0,0
exit
.endif
invoke InternetConnect,hInternet,offset host,INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0
mov hConnect,eax
.if hConnect == NULL
invoke MessageBox,0,chr$("InternetConnect error"),0,0
exit
.endif
mov hRequest,FUNC(HttpOpenRequest,hConnect,chr$("POST"),chr$("/wp-login.php"),NULL,chr$("www.cmsbru.te/wp-login.php"),0,INTERNET_FLAG_KEEP_CONNECTION,1)
.if hRequest == NULL
invoke MessageBox,0,chr$("HttpOpenRequest error"),0,0
exit
.endif
invoke HttpSendRequest,hRequest,offset headers,sizeof headers-1,offset postdata,sizeof postdata-1
.if eax == 0
invoke MessageBox,0,chr$("HttpSendRequest error"),0,0
exit
.endif
;читаю 1 раз, т.к. нужны хидеры + пример сугубо тестовый, меньше кода
invoke InternetReadFile,hRequest,offset szData,sizeof szData-1,offset dwBytesRead
test eax,eax;if (bRead == FALSE)
jz @exit
.if dwBytesRead==0
jmp @exit
.endif
@@:
mov cookS,sizeof cook
invoke HttpQueryInfo,hRequest,HTTP_QUERY_SET_COOKIE,addr cook,addr cookS,addr cnt
invoke MessageBox,0,addr cook,0,0
invoke wsprintf,offset szData,chr$("%d"),cnt
invoke MessageBox,0,offset szData,0,0
cmp cnt,ERROR_HTTP_HEADER_NOT_FOUND
jnz @b
@exit:
invoke InternetCloseHandle,hRequest
invoke InternetCloseHandle,hConnect
invoke InternetCloseHandle,hInternet
ret
cookies ENDP
end main