[VC++ 6.0] Serverzugriff auf ein PHP-Script

vfl_freak

Premium-User
Moin zusammen,

ich stehe seit gestern vor einem Problem und weiß nicht so recht, wie ich es angehen kann ...

Ich habe hier einen in VC++ 6.0 geschriebenen Server, der nun Daten von einem Webserver holen, indem ein php-Script aufgerufen wird.
Dieses Script liefert mir (lt. Aussage des Seitenbetreibers) eine Textdatei im csv-Format, deren Inhalt der Server dann verarbeiten und in eine DB speichern soll.

Ich habe neben der Beschreibung der Daten in dieser Schnittstelle lediglich die Webadresse und die Zugangsdaten.
Hiermit wäre also ein Aufruf á la (https://username : password@www.xyz.com/..../csv.php möglich.

Bei einem Browseraufruf sehe ich auch sofort die gewünschen Daten ... nur:
wie veranstalte ich diesen Aufruf in meinem Server (d. h. mit C++) :confused:

Ich kenne von Java die Klasse "URL", mit der ich (vermutlich) problemlos dieses php-Script aufrufen könnte. In der MFC bin ich nun auf Klassen wie "CInternetFile", "CInternetSession", "CInternetConnection" oder "CHttpFile" gestossen, ohne sie allerdings so richtig zu verstehen ... :-(

Baue ich zuerst eine Session und/oder Connection auf, um dann über CInternetFile das Ergebnis des php-Aufrufs empfangen zu können ?

Ich bin bei dieser Thematik leider blutiger Anfänger und würde mich über einige Hinweise sehr freuen, die mir hier auf die Sprünge helfen können.

Danke im voraus
LG aus OS
Klaus
 
Moin deepthroat,

erstmal Danke für den Link, wenngleich ich dort auch schon rumgeturnt war ...

Dabei war mir aufgefallen, dass dort als DeviceType lediglich INTERNET_SERVICE_HTTP aufgeführt ist und ich mich gefragt habe, ob es dann auch für https gilt ?

Habe jetzt dort gerade über Deinen Link den Eintrag
Code:
INTERNET_DEFAULT_HTTPS_PORT Uses the default port for Secure Hypertext Transfer Protocol (HTTPS) servers (port 443).
gefunden, den ich dann in den mir aus der VS-Hilfe vorliegenden Beispielen vermutlich als Port beim "GetHTTPConnect" übergeben kann ....

Na, dass ist doch mal ein Ansatz, mit dem man arbeiten kann :p

Danke und Gruß
Klaus
 
Moin,

ja, ich habe jetzt längere Zeit rum experimentiert und bekomme in der Tat Probleme mit dem "HTTPS".

Übertrage ich die URL in der Form
"_http_:_//_username_:_password[at]www[dot]xyz[dot]com/..../abc[dot]php"
bekomme ich zwar Kontakt mit dem Server, jedoch die Meldung zurück, dass entweder User pder PW abgelehnt wurden!

Übertrage ich jedoch mit HTTPS, dann liefert mir der Servicetyp einen Fehler.

Hier mal der Code, den ich aus Beispielen aus der Hilfe entwickelt habe:
Code:
string CHTTPZugriff::fGetPNWDataAll( )
{
    // natürlich OHNE die Unterstriche
    LPCTSTR  pszURL = "_http_:_//_username_:_password[at]www[dot]xyz[dot]com/..../abc[dot]php";
    string strResult = "";

    DWORD dwHttpRequestFlags = INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT;

    CInternetSession session;
    CHttpConnection* pServer = NULL;
    CHttpFile* pFile = NULL;

    try
    {
        // Überprüfung, ob es sich um eine sinnvolle URL handelt
        CString strServerName;
        CString strObject;
        INTERNET_PORT nPort;
        DWORD dwServiceType;

        if( !AfxParseURL(pszURL, dwServiceType, strServerName, strObject, nPort) )
        {
            TRACE ("AfxParseURL fehlgeschlagen: %s / %s \n", strServerName, pszURL );
        }

        if( dwServiceType != INTERNET_SERVICE_HTTP )
        {
            TRACE ("dwServiceType fehlgeschlagen: %ld \n", dwServiceType );
        }

        pServer = session.GetHttpConnection( strServerName, nPort );
        pFile = pServer->OpenRequest( CHttpConnection::HTTP_VERB_GET,strObject, NULL, 1, NULL, NULL, dwHttpRequestFlags );
        pFile->SendRequest();

        TCHAR sz[1024];
        while( pFile->ReadString(sz, 1023) )
        {
            CStringUtils::strrtrim( sz );
            strResult += string( sz );
        }

        pFile->Close();
        pServer->Close();
    }
    catch (CInternetException* pEx)
    {
        // Abfangen von WinInet Fehlern
        TCHAR szErr[1024];
        pEx->GetErrorMessage(szErr, 1024);
        TRACE( "ErrorMSG: <%s>)\n", szErr );
        TRACE( "Error: Exiting with CInternetException(%d)\n", pEx->m_dwError );
        pEx->Delete();
    }

    if( pFile != NULL )
    {
        delete pFile;
    }
    if( pServer != NULL )
    {
        delete pServer;
    }

    session.Close();

    TRACE("*** sizeof strResult=<%ld>\n", strResult.length() );

    return strResult;

} // fGetPNWDataAll

Die konkreten Daten in der Webadresse musste ich aus Datenschutzgründen natürlich anonymisieren!

Habe ich da in der V6.0 u. U. ein generelles Problem?

Danke und Gruß
Klaus
 
Zurück