2017-09-01 2 views
0

Ich habe mehrere Beispiele von hier versucht, aber nichts scheint für mich zu arbeiten.Post SOAP XML-Anfrage

Ich brauche diesen Umschlag für die Anfrage zu senden:

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:v2="http://xmlns.oracle.com/oxp/service/v2"> 
    <soapenv:Header /> 
<soapenv:Body> 
    <v2:runReport> 
    <v2:reportRequest> 
    <v2:attributeLocale>en-US</v2:attributeLocale> 
    <v2:attributeTemplate>Default</v2:attributeTemplate> 
    <v2:reportAbsolutePath>/Custom/Financials/Fac/XXIASA_FAC.xdo</v2:reportAbsolutePath> 
    <v2:dynamicDataSource xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> 
    <v2:parameterNameValues xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> 
    <v2:XDOPropertyList xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /> 
    </v2:reportRequest> 
    <v2:userID>user</v2:userID> 
    <v2:password>password</v2:password> 
    </v2:runReport> 
    </soapenv:Body> 
    </soapenv:Envelope> 

Dies ist mein Code:

$url = 'https://soapurl/v2/ReportService?WSDL'; 

    $headers = array("Content-type: application/soap+xml; charset=\"utf-8\"", "Content-length: " . strlen($xml)); 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    $response = curl_exec($ch); 
    print_r($response); 

Und das ist das seltsame Ergebnis, das ich zurück bin immer:

��R;o�0��+\ﱁTj�QZ�S_R���m�%sF�@��k�Q�l�����lwjT紅�$�H��Rñ���6OxW2gy�`�_aPƶ �|�\{��:Q��;�S���H���EG�<9���q$�v&gI�ҟ���l��6y��yB���?[��x���X5�a��6��5& ��<8�Q���e`�/F+������{���]������K�(2Q��T���X(�F*ϵ�k��eym����Ӊ��]�M�!y ��"m.�����0z�|�1���g�����}� ������C 

Warum bekomme ich das?

Antwort

1

Wenn Sie einen Netzwerk-Sniffer verwendet haben (ich würde Wireshark empfehlen), würden Sie sehen, dass die Daten komprimiert sind. Dies wird normalerweise serverseitig verwendet, um die benötigte Bandbreite zu reduzieren. Jeder einzelne moderne Browser wird automatisch dekomprimiert, aber nicht auf Ihrer Anwendung. Wenn Sie diese Zeichenfolge in einer Datei gespeichert haben (z. B. response.bin) und file response.bin ausgeführt haben, wird der verwendete Komprimierungsalgorithmus angezeigt (wahrscheinlich gzip oder deflate).

Um dies zu lösen, fragen Sie curl die Antwort für Sie zu dekomprimieren:

curl_setopt($ch,CURLOPT_ENCODING, ''); 
+0

Wow! Daran hätte ich nie gedacht ... Nun gibt es mir eine lesbare Antwort, aber ich habe keine Antwort erhalten: "ns1: Client.NoSOAPAction no SOAPAction header! Cffar23070v04.usdc2.oraclecloud.com" keine Idee? danke für Ihre Hilfe! :) – elunap

+1

Die Fehlermeldung sagt 'no SOAPAction header'. Ihr XML-Umschlag enthält keine SOAPAction. Lesen Sie die Webservice-Dokumentation, um zu sehen, welche SOAPAction unterstützt wird. Und bitte überdenken Sie die Antwort, wenn es Ihnen geholfen hat. :) – ThoriumBR