Red de conocimiento informático - Problemas con los teléfonos móviles - Uso de la función API de WinInet InternetWriteFile bajo el protocolo http

Uso de la función API de WinInet InternetWriteFile bajo el protocolo http

BOOL InternetWriteFile(

EN HINTERNET hFile,

EN LPCVOID lpBuffer,

EN DWORD dwNumberOfBytesToWrite,

OUT LPDWORD lpdwNumberOfBytesWritten

);

hFile

Identificador válido devuelto por una llamada anterior a FtpOpenFile o un identificador de HINTERNET enviado por HttpSendRequestEx

lpBuffer

Dirección de un buffer que contiene los datos a escribir en el archivo

dwNumberOfBytesToWrite

Número de bytes a escribir en el archivo

p>

p>

lpdwNumberOfBytesWritten

Dirección de una variable que recibe el número de bytes escritos en el búfer InternetWriteFile establece este valor en cero antes de realizar cualquier trabajo o verificación de errores.

Dé un ejemplo:

#include

#include

#include

BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize);

#define BUFFSIZE 500

void main( int argc, char **argv )

{

DWORD dwPostSize;

if (argc < 4)

{

printf("Uso: Bigpost < Ruta>\n");

printf(" es el número de KB a POST\n");

printf(" es el servidor para POST a\n");

printf(" es la ruta virtual para POST a\n");

exit(0);

}

if ( ((dwPostSize = strtoul(argv[1],NULL,10)) == 0) || (dwPostSize >=) )

{

printf("%s

El tamaño no es válido. Los tamaños válidos son del 1 al 2047999\n",[1]);

exit(0);

}

printf( ". Prueba de publicación %luKB con WinInet\n", dwPostSize);

dwPostSize *= 1024; // Convertir KB a bytes

HINTERNET hSession = InternetOpen( "HttpSendRequestEx",,

NULL, NULL, 0);

if(!hSession)

{

printf("Error al abrir la sesión\n" );

exit(0);

}

HINTERNET hConnect = InternetConnect(hSession, argv[2],,

NULL , NULL, INTERNET_SERVICE_HTTP,NULL, NULL);

if (!hConnect)

printf( "Error al conectar\n" );

else p>

{

HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", argv[3],

NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);

if (!hRequest)

printf( "Error al abrir el identificador de solicitud\n" );

else

{

if(UseHttpSendReqEx(hRequest, dwPostSize))

{

char pcBuffer[BUFFSIZE];

DWORD dwBytesRead;

printf ("\nEl servidor devolvió lo siguiente:\n");

do

{ dwBytesRead=0;

if(InternetReadFile(hRequest , pcBuffer , BUFFSIZE-1,&dwBytesRead))

{

pcBuffer[dwBytesRead]=0x00 // Búfer de terminación nula

printf("%;

s", pcBuffer);

}

else

printf("\nInternetReadFile falló");

} while(dwBytesRead> 0);

printf("\n");

}

if (!InternetCloseHandle(hRequest))

printf( "Error al cerrar el identificador de solicitud\n" );

}

if(!InternetCloseHandle(hConnect))

printf("Error al cerrar el identificador de conexión\ n");

}

if( InternetCloseHandle( hSession ) == FALSE )

printf( "Error al cerrar el identificador de sesión\n" );

printf( "\nFinished.\n" );

}

BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize)

{

INTERNET_BUFFERS BufferIn;

DWORD dwBytesWritten;

int n;

BYTE pBuffer[1024];

BOOL bRet;

BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS ); // Debe configurarse o se producirá un error

BufferIn.Next = NULL;

BufferIn.lpcszHeader = NULL;

BufferIn.dwHeadersLength = 0;

BufferIn.dwHeadersTotal = 0;

BufferIn.lpvBuffer = NULL;

BufferIn .dwBufferLength = 0;

BufferIn.dwBufferTotal = dwPostSize; // Este es el único miembro utilizado además de dwStructSize

BufferIn.dwOffsetLow = 0;

BufferIn .dwOffsetHigh = 0;

if(!HttpSendRequestEx( hRequest, &BufferIn, NULL, 0, 0))

{

printf( "Error en HttpSen

dRequestEx %d\n",GetLastError() );

return FALSE;

}

FillMemory(pBuffer, 1024, 'D'); // Llenar el buffer con datos

bRet=TRUE;

for(n=1; n<=(int)dwPostSize/1024 && bRet; n++)

{

if(bRet=InternetWriteFile( hRequest, pBuffer, 1024, &dwBytesWritten))

printf( "\r%d bytes enviados.", n*1024);

}

if(!bRet)

{

printf( "\nError en InternetWriteFile %lu\n",GetLastError() );

return FALSE;

}

if(!HttpEndRequest(hRequest, NULL, 0, 0))

{

printf( "Error en HttpEndRequest %lu \n", GetLastError());

devuelve FALSO;

}

devuelve VERDADERO; p>

}