Что нового

[Сеть, интернет] Формирование POST-запроса к веб-серверу (формат multipart/form-data)

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Всем доброго времени суток...
Хочу спросить у коллективного разума, справится-ли нами обожаемый AutoIt :IL_AutoIt_1: c такой задачей как
формирование и отправка POST-запроса в формате multipart/form-data к веб-серверу...
Если суть изложить "человекопонятным языком" - нужна утилитка которая позволит пользователю выбрать файлик... а утилитка сформирует такой-же запрос какой формируется браузерами в случае
Код:
...
'<form action="/upload" method="post" enctype="multipart/form-data">'
...
и собственно дождется "file is successfully loaded" - ответа
;D естеСНО хочется там индикацию процесса передачи и т.д.
Хотя основной вопрос склоняется к тому - КАК !? и вообще обладает ли AutoIt/какя-либо UDF такой функциональностью как формирование POST/GET
 

axlwor

Скриптер
Сообщения
657
Репутация
147
для начала
Код:
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")

и дальше работаем с методами этого объекта
 
Автор
R

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
axlwor, в процессе гугления я так и нешел однозначной инфы, бытет мнение что передача файлов через WinHttp.WinHttpRequest.5.1 - никак...
он мол не умеет multipart (множественне содержимое)...
А файло размеров более 40 Кб по Http кроме как в виде multipart не передается... послностью потоковая передача через FTP а по Http только фрагментами...
Много инфы про использование для этих целей WinInet.dll, но WinInet API Reference - пока для меня "тьма египетская"
Вот так выглядит запрос от браузера
Код:
Content-Type: multipart/form-data; boundary=---------------------------136942466832627 
Content-Length: 2467815 

-----------------------------136942466832627 
Content-Disposition: form-data; name="download"; filename="REC_0008.mp3" 
Content-Type: audio/mpeg \\ Файло аудио - пример, в идеале это офис-доки должны быть

\\ Здесь собсно байты файла (мниться мне что закодированные, ворос чем и как формируется тело с разделителем "136942466832627", какими кусками и т.д.)

вот и как сформировать такое хитрое тело ?
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Нагуглил...
Код:
$URL = "Тут прописываем URL запроса"
$PostData = "Тут прописываем параметры запроса"
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("POST", $URL)
$oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
$oHTTP.Send($PostData)
$oHTTP.WaitForResponse
$Response = $oHTTP.ResponseText

Протестил работает... =)

P.S. WinHTTP не очень люблю... сейчас додумаю, как отправить POST запрос через IE.au3
 
Автор
R

RUVATA

лучше один раз увидеть, чем десять раз услышать...
Сообщения
132
Репутация
38
Я увлекся асинхронным JavaScript на стороне сервера - NODE.js (конечно оффтоп, но всем кто увлекается веб разработкой советую)...
Для асинхронки файл необходимо слать в формате multipart (множественное содержимое) т.е по Chunk (кусками)
Там свой хитрый подвид POST-запросов вот здесь описан стандарт... если кто столкнется по Content-Type: здесь стандарт
Я уже вроде разобрался...
WinHttp.WinHttpRequest.5.1 - подойдет только body надо будет собирать вручную...
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Если работали с HTML+PHP то этот способ думаю будет привычнее... :smile:

Код:
#include <IE.au3>
$row="много кного текста..." ; Строчка коментариев которую будем пересылать
$oIE = _IECreate ("",0,0) ; Если убрать 0, тобудет отображаться окно IE
$sHTML = "" ;создаем тело документа HTML
$sHTML &= "<HTML>" & @CR
$sHTML &= "<HEAD>" & @CR
$sHTML &= "</HEAD>" & @CR
$sHTML &= "<body>" & @CR
$sHTML &= '<form name="Edit" action="UPdate.php" method="POST">' & @CR
$sHTML &= '<input tupe="text" name="ID" value="3211">' & @CR
$sHTML &= '<textarea rows="10" cols="60" name="comment" >'&$row&'</textarea>' & @CR
$sHTML &= '<input type="submit" value="Изменить">' & @CR
$sHTML &= "</body>" & @CR
$sHTML &= "</HTML>"
_IEDocWriteHTML ($oIE, $sHTML) ; Записать тело HTML
$oForm = _IEFormGetCollection ($oIE, 0) ;Получить форму
_IEFormSubmit($oForm) ;Отправить форму
_IEQuit($oIE) ;Закрыть IE
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Подскажите пожалуйста как составить POST или GET запрос авторизации на Mail.ru?
 

valldar

Новичок
Сообщения
32
Репутация
2
to Viktor1703,
http://autoit-script.ru/index.php/topic,6584.msg74491.html#msg74491
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
valldar
по твоему он полтора года ждал твоего совета найти нужную тему форума?
 

valldar

Новичок
Сообщения
32
Репутация
2
Kaster,
я просто завершил тему ответом на вопрос, т.к. поиск по форуму отправляет в эту тему, а ответа не было.
 
Верх