leer caracter de una web con InternetReadFile

Iniciado por neg1414, 10 Diciembre 2019, 08:51 AM

0 Miembros y 1 Visitante están viendo este tema.

neg1414

Buenas

tengo una pagina web MIWEB con el codigo


<?php

$Caracter 
'S';
echo 
$Caracter;
?>



Quiero leer desde mi aplicacion el valor de $Caracter y codifico

char  Buffer;
DWORD BytesRead=0;

  const ::HINTERNET sesion = InternetOpen("agent",INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL,0);
  if(sesion!=NULL)
  {

     AnsiString Url = "http://www.MIWEB.ES";
     const ::HINTERNET handle = ::InternetOpenUrl(sesion,Url.c_str(),NULL,0, INTERNET_FLAG_RELOAD, 0);
     if(handle!=NULL)
     {
        while(InternetReadFile(handle,&Buffer,sizeof(Byte),&BytesRead))
        {
          if(BytesRead==0){break;}
        }
    }
    InternetCloseHandle(handle);
  }
  else
  {

  }
  InternetCloseHandle(sesion);


Pero Buffer ='/n'


Que Hago MAL Gracias.

ThunderCls

Estas usando mal la funcion InternetReadFile

Código (cpp) [Seleccionar]
BOOLAPI InternetReadFile(
  HINTERNET hFile,
  LPVOID    lpBuffer,
  DWORD     dwNumberOfBytesToRead,
  LPDWORD   lpdwNumberOfBytesRead
);


Parámetros
hFile: Identificador devuelto de una llamada anterior a InternetOpenUrl, FtpOpenFile o HttpOpenRequest.

lpBuffer: Puntero a un búfer que recibe los datos.

dwNumberOfBytesToRead: Número de bytes a leer.

lpdwNumberOfBytesRead: Puntero a una variable que recibe el número de bytes leídos. InternetReadFile establece este valor en cero antes de realizar cualquier trabajo o comprobación de errores.

Valor de retorno
Devuelve TRUE si tiene éxito o FALSE de lo contrario. Para obtener información de error extendida, llame a GetLastError. Una aplicación también puede usar InternetGetLastResponseInfo cuando sea necesario.


En tu caso tienes varios errores en tus parametros:
1- Estas usando el parametro lpBuffer como un char, cuando deberia ser un buffer o un array de chars, ej: char Buffer[MAX_BUFFER], o simplemente usar memoria dinamica
2- Estas usando el parametro dwNumberOfBytesToRead con valor 1 (sizeof(char) == 1). Necesitas especificar una mayor cantidad de bytes a leer, como una constante ej: #define MAX_BUFFER 1024
3- Al final tu linea podria quedar algo como:
Código (cpp) [Seleccionar]
while (InternetReadFile(handle, Buffer, MAX_BUFFER, BytesRead) == TRUE && BytesRead > 0)
{
    // tu codigo aqui
}
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/

neg1414

Muchisimas gracias por contestar...

Solucionado.

Gracias otra vez.