_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 27 Abr, 2005 9:58 pm Asunto: |
|
|
Hola, se me ocurren varias maneras, aquí van dos:
- Si usas C++Builder *6* puedes hacerlo con la siguiente función. En ella usamos el componente TIdHTTP que encapsula el protocolo HTTP, si quieres saber mas sobre el mira en la ayuda:
| Código: | #include <memory>
#include <IdHTTP.hpp>
bool WebFileExists1(const String& url)
{
std::auto_ptr<TIdHTTP> http(new TIdHTTP(0));
try {http->Head(url);} catch(...) { }
return (http->ResponseCode == 200);
} |
Y un ejemplo de como usarla:
| Código: | String url = "http://www.borland.es/images/common/borland_logo.gif";
if (WebFileExists2(url))
ShowMessage("El archivo existe");
else
ShowMessage("NO existe"); |
- Y si usas alguna versión más vieja puedes hacerlo con la siguiente función. En esta usamos "manualmente" el protocolo HTTP, si quieres saber más sobre el usa algún buscador, es un protocolo bastante sencillo:
| Código: | #include <memory>
#include <ScktComp.hpp>
bool WebFileExists2(const String& servidor, const String& archivo)
{
std::auto_ptr<TStringStream> stream(new TStringStream(""));
std::auto_ptr<TClientSocket> socket(new TClientSocket(0));
socket->Host = servidor;
socket->ClientType = ctBlocking;
socket->Port = 80;
try {socket->Open();} catch(...) { }
if (socket->Active)
{
int ret = socket->Socket->SendText("HEAD " + archivo
+ " HTTP/1.0\r\nHost: " + servidor + "\r\n\r\n");
while (socket->Active && ret > 0)
{
Application->ProcessMessages();
char szBuffer[1024];
ret = socket->Socket->ReceiveBuf(szBuffer, sizeof(szBuffer));
stream->Write(szBuffer, ret);
}
}
return stream->DataString.Pos("HTTP/1.0 200");
} |
Ejemplo de uso:
| Código: | String servidor = "www.borland.es";
String archivo = "/images/common/borland_logo.gif";
if (WebFileExists2(servidor, archivo))
ShowMessage("El archivo existe");
else
ShowMessage("NO existe"); |
|
|