PDA

View Full Version : [MFC] Scaricare pagina web


bizzu
04-05-2004, 13:22
Devo portare in locale una pagina web per poi analizzarla. Ho creato un programma in C++ che la scarica in questo modo:

CInternetSession* m_pInetSession;
CStdioFile* source; // file sorgente
LPTSTR instream; // stream del file sorgente
char buf[2048];
CStdioFile outfile; //file di output

m_pInetSession = new CInternetSession("AppUnknown", 1, INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0 );

source = m_pInetSession->OpenURL(url,1, INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_KEEP_CONNECTION,NULL,0);

if( !outfile.Open(sourceFile, CFile::modeCreate | CFile::modeWrite | CFile::typeText ) ) {
exit( 1 );
}

while (instream != NULL) {
instream = source->ReadString(buf, 255);
outfile.WriteString(buf);
}

m_pInetSession->Close();
outfile.Close()

Il programma funziona, il mio unico problema č che vorrei ricevere un errore di qualche tipo nel caso in cui la pagina non sia disponibile. Invece, ora il file viene salvato normalmente, ma corrisponde alla classica pagina di errore 404. Questo mi rovina tutta la successiva analisi, che non dovrebbe avere luogo in mancanza della giusta pagina!
Come posso fare?
Thanx :)

cionci
04-05-2004, 14:22
E' pių difificle di quanto sembri...alcuni server forniscono invece dell'errore 404 uno stato 200 (quindi normale) ed emettono una pagina personalizzata di errore... Questa situazione non la puoi correggere...

Modifica il codice cosė:

CHttpFile* source; // file sorgente
LPTSTR instream; // stream del file sorgente
char buf[2048];
CStdioFile outfile; //file di output

m_pInetSession = new CInternetSession("AppUnknown", 1, INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0 );

source = (CHttpFile *)m_pInetSession->OpenURL(url,1, INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_KEEP_CONNECTION,NULL,0);

if(f)
{
CString a;
f->QueryInfo(HTTP_QUERY_STATUS_CODE, a);
if(atoi((LPCTSTR)a) != 200)
{
f->QueryInfo(HTTP_QUERY_STATUS_TEXT, a);
f->Close();
return ....
}
}
if( !outfile.Open(sourceFile, CFile::modeCreate | CFile::modeWrite | CFile::typeText ) ) {
exit( 1 );
}

bizzu
04-05-2004, 19:50
Perfetto, grazie 1000! :D
Mi sfugge solo una cosa: f come lo devo dichiarare?

cionci
05-05-2004, 00:06
Scusa...sostituisci source a f ;) Ho preso il tutto da un mio vecchio codice ;)

bizzu
05-05-2004, 10:02
Ah ok! Grazie ancora :)

newpeppe
06-11-2009, 14:48
Resuscito un momento questa discussione perchč l'ho trovata utile per i mie scopi e vorrei chiedere: il codice postato funziona ma non con indirizzi contenenti un punto interrogativo... come potrei fare per scaricare una pagina web, ad esempio, come questa?
http://www.giochinumerici.info/portal/page/portal/sitoinformativowfl/vincite/concorsidioggi/concorso?anno=2009&concorso=491

Grazie :)

newpeppe
07-11-2009, 11:06
Nessuno sa come si fa? :cry:

newpeppe
13-11-2009, 17:52
Up