Einzelnen Beitrag anzeigen

TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Wie anmelden an entfernten Webservice per Headerinfo?

  Alt 1. Feb 2017, 16:25
Delphi-Quellcode:
var
  accesstoken: string;
  cashbox: string;
begin
  cashbox := '31ada64f-bafd-492e-ac92-867f82bb2e59';
  accesstoken := 'BJLC+VckWl36AhGwvH3sOC6bQcowHjWq7vx3wsDy42nnLcyB49vrgkxkeMvqodNtvtwaJ51HUaBs7eiX7PUyiOg=';

  HttpAddRequestHeaders(Data, PChar(cashbox), Length(cashbox), HTTP_ADDREQ_FLAG_ADD);
  HttpAddRequestHeaders(Data, PChar(accesstoken), Length(accesstoken), HTTP_ADDREQ_FLAG_ADD);
end;
Hm, also mein OnBeforePost wird zwar aufgerufen, aber weiter komme ich nicht.
Die Header haben die Form 'key: value', wie auch im verlinkten Beispiel zu sehen ist. Hier im Delphi Code fehlt der key (und der Doppelpunkt), der Server wird daher nicht den erwarteten Header im Request finden.
Dank den Hinweis von Sebastian kommt kein 404-Fehler mehr.
Es hat wirklich das E gefehlt.

Auch vielen Dank an den Hinweis mit key: value.

Leider Gottes ist der Response-Stream leer, woraus ein XML geformt werden soll.
Kein Plan ob es an mir liegt oder an der Gegenseite.

Code:
First chance exception at $7433A832. Exception class EDOMParseError with message
'Ein XML-Dokument muss ein Element der obersten Ebene enthalten.

Line: 0
'.
Process FiskalTrustJournal.exe (7844)
Code:
:7433a832 KERNELBASE.RaiseException + 0x62
Xml.XMLDoc.TXMLDocument.LoadData
Xml.XMLDoc.TXMLDocument.SetActive(???)
Xml.XMLDoc.TXMLDocument.LoadFromStream(???,???)
Soap.OPToSOAPDomConv.TOPToSoapDomConvert.ProcessResponse($4F259C,$2917248,$19FE48,$2985770,$2960E40)
Soap.Rio.TRIO.DoDispatch($2985770,???,$19FE48)
Soap.Rio.TRIO.Generic($29855E8,((($5850C4, TValueDataImpl($2953394) as IValueData, 0, 0, 0, nil, nil, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (nil, nil), nil)), (($4012CC, TValueDataImpl($2953354) as IValueData, 0, 0, 0, nil, nil, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (nil, nil), nil))),$19FEE0)
Soap.Rio.TRIO.QueryInterface$15$ActRec.$0$Body(???,???,$19FEE0)
System.Rtti.TVirtualInterface.RawCallback($2959F28,((($5850C4, TValueDataImpl($2953394) as IValueData, 0, 0, 0, nil, nil, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (nil, nil), nil)), (($4012CC, TValueDataImpl($2953354) as IValueData, 0, 0, 0, nil, nil, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (nil, nil), nil))),$19FEE0)
System.Rtti.TVirtualInterface.Create$547$ActRec.$0$Body(???,???,$19FEE0)
System.Rtti.TMethodImplementation.Intercept($19FF08)
Im Eventhandler THTTPRIO.OnBeforePost greife ich den SOAPRequest: TStream ab und lade ihn in einen Stringstream und lasse ihn mir ausgeben.

Das schicke ich also zum Dienst hin:
Code:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Body><Echo xmlns="http://tempuri.org/"><message>Hello</message></Echo></SOAP-ENV:Body></SOAP-ENV:Envelope>
Es muss doch möglich sein mithilfe des importieren IPOS-Interfaces auf den externen Webservice zuzugreifen, ich will auf keinen Fall anfangen die JSON- oder XML-Request "per Hand" zu knüppeln.

Geändert von TiGü ( 1. Feb 2017 um 16:28 Uhr)
  Mit Zitat antworten Zitat