Передача файла методом POST с получением ответа от скрипта
От: O-Planet  
Дата: 17.09.09 02:02
Оценка:
Добрый день!

Облазил весь инет, но не нашел ответа на свой вопрос.

Хочу передать на сервер содержимое некоторого файла методом post. На сервере данные обрабатывает скрипт. После передачи, скрипт возвращает что-то, например, просто символьную строку "Ок"...

Делаю:

hInt=InternetOpen(...);
hConnect=InternetConnect(hInt, ... );
hRequest=HttpOpenRequest(hConnect,"POST",MyUrl, ... );
HttpSendRequest(hRequest, ... );
InternetWriteFile(hRequest, pBuff, ... );
HttpEndRequest(hRequest, ... );
...

Не понятно, как мне получить ответ от сервака, это самое "Ок"?


27.09.09 14:24: Перенесено модератором из 'WIN API' — Кодт
Re: Передача файла методом POST с получением ответа от скрип
От: piksel Россия  
Дата: 17.09.09 06:06
Оценка: -1
http://www.rsdn.ru/article/inet/inetapi.xml
Автор(ы): Robert Coleridge
, например.

"Функция 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 с получением ответа от скрип
От: Pavel Dvorkin Россия  
Дата: 17.09.09 06:45
Оценка:
Здравствуйте, 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.

InternetReadFile

И вообще — читай

http://msdn.microsoft.com/en-us/library/aa384322(VS.85).aspx
With best regards
Pavel Dvorkin
Re: Передача файла методом POST с получением ответа от скрип
От: O-Planet  
Дата: 24.09.09 22:32
Оценка:
Не помогло Потому что хочу транслировать с web камеры. Вот пример кода, кому интересно:


<HTML><HEAD>
<script language="javascript">
function full()
{
Player.fullScreen='true';
alert("Ok");
}
</script>
</HEAD>
<BODY>
<DIV id=DivPlayer align=center>

<object id="Player" type="application/x-oleobject" classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" width="480px" height="385px">
<param name="FileName" value="mms://live.camstreams.com/csmokspain">
<param name="AutoStart" value="true">
<param name="enableContextMenu" value="false">
<param name="fullScreen" value="true">
<param name="ShowDisplay" VALUE="false">
<param name="ShowStatusBar" value="0">
<param name="ShowControls" value="0">
<embed src="mms://live.camstreams.com/csmokspain" autostart="1" enablecontextmenu="0" showdisplay="0" showcontrols="0" showstatusbar="0" fullScreen="1" width="480px" height="385px">
</embed>
</object>

<div onclick="javascript:full()">Full Screen</div>
</DIV></BODY></HTML>
Re: Передача файла методом POST с получением ответа от скрип
От: x64 Россия  
Дата: 27.09.09 15:07
Оценка:
OP>hInt=InternetOpen(...);
OP>hConnect=InternetConnect(hInt, ... );
OP>hRequest=HttpOpenRequest(hConnect,"POST",MyUrl, ... );
OP>HttpSendRequest(hRequest, ... );
OP>InternetWriteFile(hRequest, pBuff, ... );
OP>HttpEndRequest(hRequest, ... );
OP>...

Это чушь. Во-первых, 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 непосредственно здесь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.