HTTP Request und große Textmengen

30. Januar 2015 13:39

Hallo zusammen, ich schon wieder ;-)

Ich habe anhand dieses Beitrags http://www.msdynamics.de/viewtopic.php?t=3807 einen http-Request hinbekommen.
Nur ist das, was ich zurück bekomme, keine XML-Struktur. Der Apache Server, der uns die Daten liefert kann uns die Daten entweder als Text oder als Stream zur Verfügung stellen.

Wenn nun der Text klein genug ist dann klappt auch alles wunderbar, wenn mir der Apache die Daten als Text liefert (header(‘Content-Type: text/event-stream’);).

Hier sieht mein Code so aus:
Code:
    VAR:
      XMLHTTP@60000 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 6.0:{88D96A0A-F192-11D4-A65F-0040963251E5}:'Microsoft XML, v6.0'.XMLHTTP60";
      XMLString@60001 : Text[1024];
      responseText@60007 : Text[1024];
   
   Code:
      XMLString:='http://emmaster.vic.int/bde.dev/index.php/DataHandling.Push2NAV';
      CREATE(XMLHTTP);
      XMLHTTP.open('GET', XMLString, FALSE);
      XMLHTTP.send('');
      responseText:=XMLHTTP.responseText();


Wenn der Text aber nun zu groß ist, bekomme ich natürlich die Fehlermeldung "Die Länge des Textstrings überschreitet die Größe des Zeichenpuffers".
Also dachte ich mir, ich lese das ganze direkt als Stream ein und habe sage Apache, er soll einen Stream schicken (header(‘Content-Type: test/plain’);).

Das verusche ich nun so:
Code:
   VAR:
      XMLHTTP@60000 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 6.0:{88D96A0A-F192-11D4-A65F-0040963251E5}:'Microsoft XML, v6.0'.XMLHTTP60";
      XMLString@60001 : Text[1024];
      XMLDoc@60003 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 6.0:{F5078F32-C551-11D3-89B9-0000F81FE221}:'Microsoft XML, v6.0'.DOMDocument30";
      iStream@60004 : InStream;
      TempTable@60010 : Record 99008535;

   Code:
           XMLString:='http://emmaster.vic.int/bde.dev/index.php/DataHandling.Push2NAV';
            CREATE(XMLHTTP);
            XMLHTTP.open('GET', XMLString, FALSE);
            XMLHTTP.send('');
            CLEAR(TempTable);
            TempTable.Blob.CREATEINSTREAM(iStream);
            iStream.READ(XMLHTTP.responseStream());
            IF ISCLEAR(XMLDoc) THEN CREATE(XMLDoc);
            //Hier speichere ich in eine Datei nur um das Ergebnis zu prüfen
            XMLDoc.load(iStream);
            XMLDoc.save('C:\Temp\XMLRequest.txt');


Beim Ausführen des Codes erhalte ich bei Zeile
Code:
   iStream.READ(XMLHTTP.responseStream());

die Fehlermeldung: "Sie verwenden einen ungültigen Datentyp für diese Funktion".
Verwende ich stattdessen:
Code:
   iStream:=(XMLHTTP.responseStream());

ist der Stream leer.

Auch habe ich versucht, den Responstext direkt in eine Bigtext-Variable zu übergeben:
Code:
    VAR
      XMLHTTP@60000 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 6.0:{88D96A0A-F192-11D4-A65F-0040963251E5}:'Microsoft XML, v6.0'.XMLHTTP60";
      XMLString@60001 : Text[1024];
      responseBigText@60002 : BigText;
      oStream@60006 : OutStream;
      ThisFIle@60005 : File;

   Code:
      XMLString:='http://emmaster.vic.int/bde.dev/index.php/DataHandling.Push2NAV';
      CREATE(XMLHTTP);
      XMLHTTP.open('GET', XMLString, FALSE);
      XMLHTTP.send('');
      responseBigText.ADDTEXT(XMLHTTP.responseText());
      ThisFIle.TEXTMODE(TRUE);
      ThisFIle.CREATE('c:\dammit.txt');
      ThisFIle.CREATEOUTSTREAM(oStream);
      responseBigText.WRITE(oStream);
      ThisFIle.CLOSE;     


Aaaaber: Ist der Text wieder etwas länger, dann bekomme ich wieder die Fehlermeldung: "Die Länge des Textstrings überschreitet die Größe des Zeichenpuffers". :cry:
Dabei sind die Daten gar nicht soooo gorß:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: HTTP Request und große Textmengen

1. Februar 2015 19:26

Hast du schon mal versucht den einkommenden Stream direkt als Datei zu schreiben statt in eine Variable? Damit hatte ich schon mal gute Erfahrungen gemacht bei Tests einer API.

Grüße
Sipa

Re: HTTP Request und große Textmengen

2. Februar 2015 12:30

Hi Sipa,
Danke für den Tip, aber das klappt leider auch nicht :-(
Ich habe es so versucht:

Code:
XMLString:='http://emmaster.vic.int/bde.dev/index.php/DataHandling.Push2NAV';
CREATE(XMLHTTP);
XMLHTTP.open('GET', XMLString, FALSE);
XMLHTTP.send('');
ThisFIle.TEXTMODE(TRUE);
ThisFIle.CREATE('c:\dammit.txt');
ThisFIle.WRITE(XMLHTTP.responseText());
ThisFIle.CLOSE;


Und erhalte beim Schreiben wieder die Fehlermeldung "Die Länge des Textstrings überschreitet die Größe des Zeichenpuffers"
Hat denn sonst noch nie jemand dieses Problem gehabt? Es ist zum Verzweifeln :cry:

Re: HTTP Request und große Textmengen

2. Februar 2015 14:36

evtl. so:

Den ResponseStream in einen Variant holen
Code:
Variant := WinHTTP.ResponseStream;


Den Variant einem InStream zuweisen
Code:
InStrm := Variant;


Den Instream in eine BigText Variable lesen
Code:
BigText.READ(InStrm);


Deb Bigtext kann man ja dann z.B. in einem Blob weiterverwenden, etc.

So läuft es auf jeden Fall im guten alten CC-Client.

Gruss