Mit C++ PHP Dateien auslesen

Mhh anscheinend geht's nun. Vielen vielen Dank! :) Ich schreibe hier wieder, wenn dann doch noch was buggt.

Lol, oben in meinem Post wurde wohl "das andere Wort für Neuling" zensiert^^
 
Mhh, okay des Programm läuft. Aber anstatt das auszugeben, was die PHP Seite sagt, scheint es mir, dass das Programm einfach stoppt. Den es geht auf einmal nicht weiter :(
 
Das ist meistens wenn es keinen nichts vom InputStream lesen kann.

Am besten selber machen so eine HTTP Abfrage *g*

  1. Socket Verbindung zu www.test.de auf Port 80 erstellen
  2. Den String: "GET /server.php&befehl=test HTTP/1.1\r\nHOST: www.test.de\r\n\r\n" senden
  3. Header einlesen (bis zur ersten Leerzeile
  4. Content (der rest) einlesen und ausgeben
Lg, Yanick
 
Ich arbeite mit der oben genannten Funktion schon recht lange und habe sie erst gestern wieder benutzt. Bei mir gabs nie Schwierigkeiten.

Du solltest Folgendes beachten:

-Die Homepage MUSS mit "http://" eingeleitet werden (z.B. http://homepage.de/datei.php)
-Die Internetverbindung muss bestehen
-Achte auf korrekte Rechtschreibung, ansonsten könnte die Adresse nicht gefunden werden
-Die oben genannte Funktion kann nur folgendes auswerten:
Code:
VARIABLE1#Variable2#Variable3
so könnte das aussehen:
Code:
12345#313#235#6345#2435#76345#2634#2346#346#dfgdf#dfg
Befehl[1] = "12345";
Befehl[2] = "313";
Es muss aber nicht unbedingt "#" sein. Das bleibt dem Programmierer überlassen. Man könnte ja auch das erste Zeichen der Scriptausgabe dafür verwenden. Damit wäre das Programm dann einiges komfortabler:

Code:
char Buf2;
ReadSize = 1;
bResult = InternetReadFile(hFile,Buf2,1,&ReadSize);

for(;;){
ReadSize = 1;
bResult = InternetReadFile(hFile,Buf,1,&ReadSize);
if(bResult && (ReadSize == 0))
break;
Buf[ReadSize] = '\0';
if(Buf[0] != Buf2)
strcat(befehl[nummer], Buf);
else
nummer++;
}

Was genau tut das Programm denn?
Wenn es sich beendet, heißt es dass es die Internetseite nicht finden konnte
Wenn es hängen bleibt liegts an der auswertung.

Mach doch mal mehrere MessageBoxen in das Programm rein, um zu sehen was denn schief geht und wähle die URL mal mir deinem Browser an. Meistens liegt es daran, das manche Webanbietet einfach mal unsichtbare Werbung in die ersten Zeilen aller Scripte einfügen. Bei mir war das einmal der Fehler. Schau dir mal den Quelltext über den Browser an!

PS: Meintest du N0Ob?:)
 
Zuletzt bearbeitet:
Kannst du mir das mal vielleicht in einem Quellcode deine Methode zeigen?
Angenommen meine php-Datei gibt aus: test123
Wie würde da der Quellcode vom Socket-Verbindung herstellen bis zum cout << ausgabe;
ausgabe soll dann "test123" ausgeben

Das wäre sehr nett und ich mache nicht wieder 1000 Fehler^^

EDIT: Ah N0Ob, genau^^ Wart ich guck mal nach der Werbung. Messageboxen werden net angezeigt, des heisst wohl es liegt ganz oben der Fehler!
 
Zuletzt bearbeitet von einem Moderator:
So,
das habe ich aus meinem Programm ausgeschnitten. Es geht einwandfrei. Allerdings lauten meine Ausgaben immer "Variable1#variable2#variab......."
Wenn du immer nur eine Variable übergeben willst kannst du auch die if-schleife streichen. Dann wird nur eine Variable angenommen.

Code:
void Web()
    {
	HINTERNET hInternet;
        HINTERNET hFile;
        char  Buf[100];
        DWORD ReadSize;
        BOOL  bResult;
	int   nummer = 1;


        hInternet = InternetOpen(
            "TestclientNR.12342",
            INTERNET_OPEN_TYPE_PRECONFIG,
            NULL,
            NULL,
            0);

        hFile = InternetOpenUrl(
            hInternet,
            "http://adresse.de/datei.php",
            NULL,
            0,
            INTERNET_FLAG_NO_CACHE_WRITE,
            0);

    
        for(;;)
		{
			ReadSize = 1;

            bResult = InternetReadFile(
                hFile,
                Buf,
                1,
                &ReadSize);
            
            if(bResult && (ReadSize == 0))
				break;

            Buf[ReadSize] = '\0';

			if(Buf[0] != '#')
				strcat(befehl[nummer], Buf);
			else
				nummer++;
        }
        
        InternetCloseHandle(hFile);
        InternetCloseHandle(hInternet);



				if(strcmp(befehl[1], "anzeigen") == 0)
				{
				alert(befehl[2],befehl[3]);  // meine eigene selbst programmierte funktion!
				}
	}
 
Zuletzt bearbeitet:
Okay, habs nochma neu gemacht. Dein Programm geht! Nur leider passiert nichts. Kann es sein, dass er die Daten einfach nicht runterlädt?
 
Versuchs mal so:
Mache überall MessageBoxen rein, nach jedem Schritt. Dann weißt du genau was schief läuft.

Mach mal eine einfache textdatei und schreibe in sie
Code:
anzeigen#abc#123
Dann benutze mal meine 2 Funktion. Es sollte gehen. (Bei mir gehts).
 
Okay, ich habe zwischen durch Lebenszeichen eingebaut. Das Ergebnis war, dass das Programm vor der If-else Schleife aufgehört haben muss.

Code:
// letztes Lebenszeichen
if(Buf[0] != '#'){
strcat(befehl[nummer], Buf);
// kein Lebenszeichen mehr
}else{
nummer++;
// kein Lebenszeichen mehr
}

Diesmal ist auch die Firewall angesprungen, ich hab dem Programm freien Internetzugang genehmigt. Also eine Verbindung will das Programm auf jeden Fall herstellen :)
Desweiteren war neu, dass das Programm diesmal mit einer Fehlermeldung abgebrochen ist und danach auch beendet wurde. In der Fehlermeldung stand irgendein wirres Zeug mit Speicherfehler usw. Der übliche Hex-Code Wirrwar. Auch besagte die Fehlermeldung, dass die Funktion "read" nicht ausgeführt werden konnte. Ich teste jetzt mal den unteren Teil offline bei einer Textdatei, wie von dir vorgeschlagen.

Gruß, lumakrieger
 

Neue Beiträge

Zurück