Что нового

[Сеть, интернет] Формирование 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
Репутация
410
Подскажите пожалуйста как составить 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,
я просто завершил тему ответом на вопрос, т.к. поиск по форуму отправляет в эту тему, а ответа не было.
 
Верх