HttpConnector

20. Januar 2010 17:02

Hi,

über eine httpURL möchte ich auf eine Schnittstelle zugreifen. Die Antwort der Schnittstell erfolgt als XML.
Dazu habe ich folgende Code gebastelt.

Code:
CLEAR(lAuXmlDoc);  // 'Microsoft XML, v6.0'.DOMDocument
CLEAR(lAuXmlHttp); // 'Microsoft XML, v6.0'.XMLHTTP
IF ISCLEAR(lAuXmlDoc) THEN
  IF NOT CREATE(lAuXmlDoc) THEN
    ERROR('Keine Instanze');
lAuXmlDoc.async := FALSE;
lAuXmlDoc.load('C:\header.xml');



CREATE(lAuXmlHttp);
lAuXmlHttp.open('POST','http://ssl.ibanrechner.de/Riban/http.html?'
  + 'function=calculate_iban&country=AT&bankcode=34000&account=0123456&user=*********&password=********',0);
lAuXmlHttp.setRequestHeader('Content-type','text/xml');
//lAuXmlHttp.setRequestHeader('SOAPAction',Text001);

lAuXmlHttp.send(lAuXmlDoc);

lAuXmlDoc.load(lAuXmlHttp.responseBody);
lAuXmlDoc.save('C:\temp.xml');



Die Anfrage Selber scheint zu funktionieren. Nur Leider wird die XML nicht befüllt.
Hat jmd. eine Idee, wieso das nicht funktioniert`?

danke..

Re: HttpConnector

21. Januar 2010 16:17

Hi rom,

ich habe kürlich eine ähnliche Anfrage umgesetzt.

Nach HTTP.Open musst Du den Request noch mit HTTP.Send ausführen.

Danach kannst Du mit HTTP.responseXML den Inhalt in ein DOMDocument laden.

Die XML-Struktur kannst Du dann weiter verarbeiten oder mit DOMDocument.save(c:\*.xml); speichern

Viele Grüße

EDIT:

Sorry, Sollte mir auch den kompletten Code anschauen.
Also ich arbeite mit ResponseXML und erhalte ein Ergebnis.

Re: HttpConnector

21. Januar 2010 18:21

Ich würde empfehlen auf alle Fälle den Status des http-Request abzufragen, bevor du weiter arbeitest. Und wie mein Vorredner schon sagte, den ResponseXML statt ResponseBody verwenden.

lAuXmlHttp.send(lAuXmlDoc);
IF lAuXmlHttp.status = 200 THEN BEGIN
lAuXmlDoc.load(lAuXmlHttp.responseXML);
lAuXmlDoc.save('C:\temp.xml');
END ELSE
ERROR(ErrorText,lAuXmlDoc.status,lAuXmlDoc.statusText);

Falls nämlich bereits das lAuXmlHttp.send aus irgendeinem Grunde fehlschlägt, erfährst Du so zumindest grob warum.

Re: HttpConnector

22. Januar 2010 10:24

Danke für die Antworten,

ich habe jetzt den Code so angepasst

Code:
...
...

CREATE(lAuXmlHttp);
lAuXmlHttp.open('GET','http://ssl.ibanrechner.de/Riban/http.html?'
  + 'function=calculate_iban&country=AT&bankcode=34000&account=016617350&user=*******&password=********',0);
lAuXmlHttp.setRequestHeader('Content-type','text/xml');
lAuXmlHttp.setRequestHeader('SOAPAction',Text001);
lAuXmlHttp.send(lAuXmlDoc);

IF lAuXmlHttp.status = 200 THEN BEGIN
  lAuXmlDoc.load(lAuXmlHttp.responseXML);
  lAuXmlDoc.save('C:\temp.xml');
END ELSE
  ERROR(TextErr001,lAuXmlHttp.status,lAuXmlHttp.statusText);


Ich bekomme da keine Fehlermeldung, noch eine gefüllte xml-Datei. Ich kann aber den HTTP Request(URL) so im Browser starten und bekomme eine Antwort zurück. Könnte man da eventuell einen anderen HTTP - Connector verwenden, der mir die Antwort in einer TXT- Datei schickt?

lg

edit: Habe aber gerade gesehen, dass es als xml zurück kommt:
hier die antwort als Quellcode:

Code:



<div id="c2202" class="csc-default" ><?xml version="1.0" encoding="UTF-8"?>
<result><iban>AT643400001661735</iban><result>passed</result><checks-list><checks>length</checks><checks>bank_code</checks></checks-list><bic_candidates-list><bic_candidates><bic>RZOOAT2L</bic><city>Linz/Donau</city><wwwcount>0</wwwcount><sampleurl></sampleurl></bic_candidates></bic_candidates-list><country>AT</country><bank_code>34000</bank_code><alternative_bank_code></alternative_bank_code><bank>Raiffeisenlandesbank Oberoesterreich AG</bank><bank_address></bank_address><bank_url>http://www.rlbooe.at</bank_url><branch></branch><branch_code></branch_code><account_number>016617350</account_number><alternative_account_number></alternative_account_number><account_validation_method></account_validation_method><account_validation></account_validation><length_check>passed</length_check><account_check></account_check><bank_code_check>passed</bank_code_check><bic_plausibility_check></bic_plausibility_check><data_age>20100121</data_age><IBANformat>ATkk BBBB BCCC CCCC CCCC</IBANformat><formatcomment>B = bank code, C = account No.</formatcomment><balance>1</balance></result>

</div>




Re: HttpConnector

26. Januar 2010 12:39

Hallo,
ich kopiere dir mal hier meinen kompletten Code rein, mit dem es problemlos funktioniert. Ich musste beim Erstellen selber feststellen, dass die Tücke manchmal im Detail liegt. Und so weiß ich z.B. nicht, welche Auswirkungen deine Einstellungen für "setRequestHeader" bewirken. Meine Einstellung ist nur für eine Basic-Authentifizierung an der Gegenstelle notwendig und kann bei Dir wahrscheinlich weggelassen werden. Zumindest verstehe ich den Aufbau deiner aufgerufenen URL so, dass du dort die Anmeldedaten gleich mitgibst.
Ein zweiter Unterschied der mir noch aufgefallen ist: die übergibst die Variable für das XML-Dokument als Parameter im send-Befehl. Vielleicht liegt auch hier das Problem?

Wie gesagt, auch bei mir war es ein weiter Weg mit Versuch und Irrtum :-)

Viel Glück!

Code:
GetSetup;

IF ISCLEAR(XMLDoc) THEN
  CREATE(XMLDoc);
IF ISCLEAR(XMLHttpConn) THEN
  CREATE(XMLHttpConn);

URLString := GSetup.RequestURL;
XMLHttpConn.open('GET',URLString,FALSE);
XMLHttpConn.setRequestHeader('Authorization',GSetup.RequestHeaderAuth);
XMLHttpConn.send();
IF XMLHttpConn.status = 200 THEN BEGIN
  XMLDoc.load(XMLHttpConn.responseXML);
  XMLDoc.save(GSetup."xml filepath returnrequest");
END ELSE
  ERROR(LError100,XMLHttpConn.status,XMLHttpConn.statusText);