Облазил весь инет, но не нашел ответа на свой вопрос.
Хочу передать на сервер содержимое некоторого файла методом post. На сервере данные обрабатывает скрипт. После передачи, скрипт возвращает что-то, например, просто символьную строку "Ок"...
"Функция InternetReadFile используется для непосредственной загрузки содержимого удаленного файла в память. Делается это просто: функции передается дескриптор к URL (полученный от предыдущего вызова InternetOpenUrl), указатель на буфер, куда заносятся данные и размер буфера."
BOOL bResult;
char cBuffer[1024]; // I'm only going to access 1K of info.
DWORD dwBytesRead;
HINTERNET hURL;
.
.
.
bResult = InternetReadFile(
hURL, // handle to URL
(LPSTR)cBuffer, // pointer to buffer
(DWORD)1024, // size of buffer
&dwBytesRead); // pointer to var to hold return value
Re: Передача файла методом POST с получением ответа от скрип
Здравствуйте, O-Planet, Вы писали:
OP>Добрый день!
OP>Облазил весь инет, но не нашел ответа на свой вопрос.
OP>Хочу передать на сервер содержимое некоторого файла методом post. На сервере данные обрабатывает скрипт. После передачи, скрипт возвращает что-то, например, просто символьную строку "Ок"...
OP>Делаю:
OP>hInt=InternetOpen(...); OP>hConnect=InternetConnect(hInt, ... ); OP>hRequest=HttpOpenRequest(hConnect,"POST",MyUrl, ... ); OP>HttpSendRequest(hRequest, ... ); OP>InternetWriteFile(hRequest, pBuff, ... ); OP>HttpEndRequest(hRequest, ... ); OP>...
OP>Не понятно, как мне получить ответ от сервака, это самое "Ок"?
InternetQueryDataAvailable
Queries the server to determine the amount of data available.
Это чушь. Во-первых, HttpEndRequest() используется исключительно в случае "асинхронного" запроса, посылаемого через HttpSendRequestEx(), т.е. в данном случае не нужна. Вызов InternetWriteFile() здесь также излишен, ибо сказано в великом писании:
lpOptional
Pointer to a buffer containing any optional data to be sent immediately after the request headers. This parameter is generally used for POST and PUT operations. The optional data can be the resource or information being posted to the server. This parameter can be NULL if there is no optional data to send.
OP>Не понятно, как мне получить ответ от сервака, это самое "Ок"?
Так же, как и данные, получаемые по любому другому запросу. Ты сам смысл слова "запрос" понимаешь вообще? Не важно пост там, не пост... это запрос, значит должен быть и ответ. Ответ можно начинать получать после успешной отработки функции HttpSendRequest(). Непосредственно для чтения возвращаемых с сервера данных существуют такие функции как HttpQueryInfo(), InternetReadData() и т.д. А вообще тебе и другим на заметку: зачастую в MSDN группы функций сопровождаются статьями (обычно называются "Using Xxx"), в которых расписано как реализовать ту или иную операцию, а также рассказываются некоторые аспекты работы функций, не упомянутые в документации к самим функциям. Для Windows Internet такая статья лежит здесь: Using WinINet. Кроме того, разделы "About Xxx" также бывают не менее полезны, в данном случае здесь и про HTTP непосредственно здесь.