Soap - base64binäre Daten in PHP

8

Ich habe einen SOAP-Client in PHP, der Aufrufe an einen WSDL-Dienst ausführt. Eine der Funktionen gibt ein base64binary -Daten zurück. Ich habe versucht, es ohne Glück zu entschlüsseln.

base64_decode ($ coded_base64data) wird nicht funktionieren. Ich habe versucht mit base_convert () und mv_convert_encoding () mit verschiedenen Parametern, konnte aber kein richtiges Ergebnis erhalten.

Die codierten Ergebnisdaten beginnen mit:

%Vor%

(Die Daten sind viel länger, das ist nur ein kleiner Teil der Zeichenkette)

Irgendeine Idee, wie es gemacht werden könnte?

Danke

BEARBEITEN

Ich habe den SoapClient mit einer neuen __doRequest () -Methode erweitert, um zu überprüfen, ob die empfangenen Daten eine richtige Base64-Zeichenfolge sind. Ich habe eine richtige Base64-codierte Zeichenfolge erhalten, und das oben gezeigte Ergebnis ist die dekodierte Antwort.

Wie auch immer, der String wurde automatisch vom SoapClient von base64 nach binary dekodiert (wie von @hakre vorgeschlagen), also muss ich mich nur mit der binären Antwort beschäftigen.

Nun muss ich die binäre Zeichenfolge in etwas entschlüsseln, das wie ein lesbares Format aussieht. Die letzte Antwort sollte georgische Ausgabe enthalten, also versuche ich, die ursprüngliche Codierung herauszufinden (aber das ist eine andere Frage).

    
galchen 03.06.2013, 09:45
quelle

2 Antworten

11

Von base64Binary (XML-Schema Teil 2: Datentypen 3.2.16) :

  

[Definition:] base64Binary steht für Base64-codierte willkürliche Binärdaten. Der Wertbereich von base64Binary ist die Menge endlicher Sequenzen binärer Oktette. Für base64Binary -Daten wird der gesamte binäre Stream mithilfe der in Abschnitt 6.8 von [RFC 2045] .

Sie kommentieren dann:

  

Wenn eine WSDL xsd: base64binary hat, sollte ich eine base64-Antwort oder eine binäre Antwort oder eine base64-codierte Zeichenfolge erhalten?

Sie sollten eine Base64-codierte Zeichenfolge erhalten. Diese Base64-codierte Zeichenfolge stellt die Binärdaten dar. Wenn Sie die XML-Spezifikation kennen, ist dies möglicherweise naheliegender, da Sie keine binären Informationen mit XML übergeben können. Sie können nur Informationen übergeben, die in den Zeichenbereich von XML passen. Und dieser Bereich schließt Zeichen aus, die Teil von Binärdaten sind, insbesondere Steuerzeichen und das höhere Fenster, wenn Sie das Binäroktett in ein niedrigeres und ein höheres Oktett aufteilen. Siehe Zeichen (Extensible Markup Language (XML) 1.0 (Fünfte Ausgabe) 2.2) , die zeigen, dass XML ist über Zeichen, nicht binäre Daten. Und das zeigt auch, welche Binärdaten diese Zeichen bilden (und welche sie nicht bilden können).

Daher wurde die Codierung base64Binary als eine Möglichkeit definiert, binäre Daten in einem XML-Dokument zu transportieren. Was Sie also in der rohen XML-Antwort auf Ihre SOAP-Anfrage haben, ist niemals binär , sondern base64-codierte Binärdaten.

Achten Sie darauf, dass Ihr SOAP-Client bereits mit dieser Codierung umgehen und die entschlüsselten Daten bereitstellen kann.

    
hakre 10.06.2013, 09:07
quelle
6

Obwohl vorherige Antwort absolut richtig ist, aber ich denke, dass dies hilfreich sein kann, um eine schnelle Lösung zu bekommen.

Wenn wir Antwort-XML einchecken, sehen wir base64-kodierte Daten und wir versuchen, sie in unserem Code zu entschlüsseln, um die echten Daten zu erhalten, aber es ist nicht erforderlich.

Entfernen Sie base64_decode .

Weil der SOAP-Client sich selbst intern dekodiert.

    
Amit Garg 14.10.2014 05:23
quelle

Tags und Links