[SOLVED] [C] [Windows CE] Download file XML

di il
7 risposte

[SOLVED] [C] [Windows CE] Download file XML

Salve a tutti,
vi scrivo per chiedervi quale è la soluzione migliore per effettuare il download di un file Xml su un dispositivo con Windows CE.
Ho provato le librerie CURL per effettuare una richiesta http ed ottenere il file, ma tali librerie non sono supportate da Win CE.
Mi chiedevo dunque se qualcuno di voi ha avuto mai a che fare con ciò e, se si, ha un codice di esempio dal quale partire.
Ho provato anche ma non capisco quali librerie manchino.

Grazie anticipatamente per l'aiuto che vogliate darmi.

7 Risposte

  • Re: [SOLVED] [C] [Windows CE] Download file XML

    Le trovi qui alla voce Requirements
  • Re: [SOLVED] [C] [Windows CE] Download file XML

    Grazie shoan per la tua risposta.
    Sono riuscito ad utilizzare la libreria WinInet.
    Adesso provavo a seguire l'esempio al link in cui è presente un codice, di seguito riportato:
    // SimpleGet.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	HINTERNET hOpen, hConnect, hReq;
    	hOpen = InternetOpen("SimpleGet", INTERNET_OPEN_TYPE_PRECONFIG, NULL, 0, 0);
    	if(!hOpen)
    	{
    		cout << "hopen " << GetLastError() << endl;
    		return 0;
    	}
    	// try the following in InternetConnect to see the problem. 
    		hConnect = InternetConnect(hOpen, "www.microsoft.com/learning/", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
    	if(!hConnect)
    	{
    		cout << "hconnect " << GetLastError() << endl;
    		return 0;
    	}
    	hReq = HttpOpenRequest(hConnect, "GET", "", "HTTP/1.1", NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);
    	if(!hReq)
    	{
    		cout << "hreq " << GetLastError() << endl;
    		return 0;
    	}
    	if(HttpSendRequest(hReq, NULL, 0, NULL, 0))
    	{
    		DWORD dwSize = 0;
    		char Data[1024] = "\0";
    		DWORD dwCode, dwCodeSize;
    		dwCodeSize = sizeof(DWORD);
    		if(!HttpQueryInfo(hReq, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwCode, &dwCodeSize, NULL))
    		{
    			cout << "queryinfo " << GetLastError() << endl;
    			return 0;
    		}
    		else
    		{
    			cout << "Status Code: " << dwCode << endl;
    		}
    		do
    		{
    			InternetReadFile(hReq, (LPVOID)Data, 1023, &dwSize);
    			if(0!=dwSize)
    			{
    				Data[dwSize]='\0';
    				cout << Data;
    			}
    			ZeroMemory(Data, 1024);
    		}while (dwSize !=0);
    	}
    	else
    	{
    		cout << "SendRequest error " << GetLastError() << endl;
    	}
    	return 0;
    }
    A quanto pare però questo codice non funziona perché, a dire dal sito,non è altro che la "Procedura per riprodurre il problema".
    Il problema è il codice di errore di ritorno, il 12007 cioè "The server name could not be resolved."
    Qualcuno potrebbe aiutarmi a capire come fare in modo che questo codice funzioni e non dia più quell'errore?
    Ci sono dei parametri da modificare?
    Grazie anticipatamente

    Giancarlo
  • Re: [SOLVED] [C] [Windows CE] Download file XML

    In InternetConnect Cambia "www.microsoft.com/learning" in "www.microsoft.co"
    In HttpOpenRequest metti il percorso al file.
    
    HttpOpenRequest(hConnect, "GET", "/learning/nomefile.estensione", "HTTP/1.1", etc...
    
  • Re: [SOLVED] [C] [Windows CE] Download file XML

    Se la connessione è cifrata invece?
    Dovrei usare la modalità:

    [url]http://USERNAME:PASSWORD@indirizzo_web.com/sottocartella/file.xml.gz[/url]

    mettendo la root

    [url]http://USERNAME:PASSWORD@indirizzo_web.com[/url] in InternetConnect

    mentre il path del file

    /sottocartella/file.xml.gz in HttpOpenRequest.

    È corretto? Vedo di provarlo subito
  • Re: [SOLVED] [C] [Windows CE] Download file XML

    Se cosi fosse l'ho appena provato e ottengo sempre l'errore 12007.
    Hai qualche altra soluzione?
    Quando l'esecuzione arriva qui
    if(!HttpSendRequest(hHttpRequest, NULL, 0, NULL, 0))
    	{
    		OutputMessage (TEXT("HttpSendRequest fails: %d\r\n"), GetLastError());
    		cleanUp(hHttpRequest, hHttpOpen);
    	}
    entra dentro l'if sollevando l'errore suddetto.

    Vorrei precisare che chiamo le funzioni nell'ordine seguente:
    InternetOpen
    InternetConnect
    HttpOpenRequest
    HttpSendRequest

    Le prime 3 passano senza problemi mentre l'ultima cade in errore.
    Ti ringrazio ancora per l'aiuto che mi darai.

    Giancarlo
  • Re: [SOLVED] [C] [Windows CE] Download file XML

    Hai provato a vedere la documentazione di InternetConnect() ?
  • Re: [SOLVED] [C] [Windows CE] Download file XML

    Quando si fa una richiesta HTTP, basta passare alla funzione InternetConnect(), come secondo parametro, l'URL privo della stringa "http://".
    Questo errore mi ha fatto impazzire una settimana.
    Spero sia di aiuto pure a voi.

    Saluti
Devi accedere o registrarti per scrivere nel forum
7 risposte