elunap
elunap

Reputation: 841

Post SOAP XML Request

I was trying several examples from here, but nothing seems to work for me.

I need to send this envelope for the request:

<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>

This is my 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);

And this is the weird result I am getting back:

��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

Why I'm getting this?

Upvotes: 0

Views: 233

Answers (1)

ThoriumBR
ThoriumBR

Reputation: 930

If you used a network sniffer (I would recomend Wireshark), you would see that the data is compressed. This is usually employed server-side to reduce the bandwidth needed. Every single modern browser will decompress automatically, but curl on your application is not. If you saved that string on a file (response.bin, for example) and ran file response.bin, you will see the compressing algorithm employed (probably gzip or deflate).

To solve this, ask curl to decompress the response for you:

curl_setopt($ch,CURLOPT_ENCODING, '');

Upvotes: 1

Related Questions