Wininet && Masm32 && Httpsendrequest

  • Автор темы FourtySeven
  • Дата начала
Статус
Закрыто для дальнейших ответов.
F

FourtySeven

#1
Пишу программу которая будет средствами wininet получать содержимое htm странички к сожалнию выдает ошибку на вызове HttpSendRequest :
Код:
	.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\wininet.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\wininet.lib


.data
count dd 0
hsocket dd 0
hConnect dd 0
hRequest dd 0
agent db "IE",0
serv db "fourty-seven.nm.ru",0
page1 db "index.htm",0
filt db "*/*",0
frm db "os",0
header db "Content-Type: application/x-www-form-urlencoded",13,10,
"Accept-Language:ru",13,10,
"Accept-Encoding:gzip, deflate",13,10,13,10,0
method db "GET",0
;------------------------------
hStdOut dd ?
.data?
content db 4096 DUP(?)	 ;Содержимое странички
.code
start:
INVOKE InternetOpen,ADDR agent,INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
MOV hsocket,EAX


INVOKE InternetConnect,hsocket,ADDR serv,INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1
MOV hConnect,EAX

INVOKE HttpOpenRequest,hConnect,ADDR method,ADDR page1,NULL,NULL,ADDR filt, INTERNET_FLAG_KEEP_CONNECTION, 1
MOV hRequest,EAX

INVOKE HttpSendRequest,hRequest,ADDR header, SIZEOF header,NULL, NULL; ЗДЕСЬ ОТЛАДЧИК ВЫДАЕТ ОШИБКУ (((

INVOKE InternetReadFile,hRequest,ADDR content,1,ADDR count // Читаем байт. 


INVOKE InternetCloseHandle,hRequest
INVOKE InternetCloseHandle,hConnect
INVOKE InternetCloseHandle,hsocket
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

INVOKE GetStdHandle,STD_OUTPUT_HANDLE
MOV hStdOut,EAX

INVOKE WriteConsoleA,hStdOut,ADDR content,1,ADDR count,NULL

INVOKE ExitProcess,0
end start
Заранее благодарен за совет.
 
Z

zubr

#2
Сразу что бросается в глаза - тип запроса GET, а используешь заголовок "Content-Type: application/x-www-form-urlencoded", данный тип заголовка используется для передачи POST-данных формы. Попробуй вместо хидера передавать NULL, да и вместо filt попробуй передавать NULL.
 
F

FourtySeven

#3
Спасибо. Еще один вопрос если я хочу передать GET запрос то как быть(Допустим login=123&pas=qwerty) и тоже самое для POST как составлять заголовки?
 
Z

zubr

#4
Ну аутентификация, по моему, от заголовков не зависит, более того многие заголовки вообще не обязательны. Важно, когда передаешь POST-дату серверу устанавливать заголовок "Content-Type: application/x-www-form-urlencoded", а когда передаешь файл-аттач серверу, то заголовок типа "Content-Type: multipart/form-data; boundary=---------------------------7d636b2qwert". Также заголовки удобней передавать функцией HttpAddRequestHeaders. А вообще, чтобы не заморачиваться с изучением нюансов HTTP-протокола, советую воспользоваться каким нибудь сниффером HTTP-пакетов. Я в свое время пользовался Http Analyzer. Сначала отправляешь через броузер запрос, с помощью сниффера смотришь, что броузер посылает (заголовки, данные), формируешь аналогичный запрос у себя.
 
N

newsoft

#6
Ребята,как быть если при загрузке страницы,сервер просит COOKIE?
 
Статус
Закрыто для дальнейших ответов.