2017-09-01 35 views
0

私はここからいくつかの例を試していましたが、何も私にとってうまくいかないようです。投稿SOAP XMLリクエスト

私は要求のために、このエンベロープを送信する必要があります。

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

これは私のコードです:

$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); 

そして、これは私が戻って取得しています奇妙な結果である:

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

なぜ私はこれを取得していますか?

答えて

1

ネットワークスニファを使用した場合(Wiresharkをお勧めします)、データが圧縮されていることがわかります。これは通常、必要な帯域幅を減らすためにサーバー側で使用されます。最新のブラウザはすべて自動的に解凍されますが、アプリケーションのカールは解凍されません。その文字列をファイル(例えばresponse.bin)に保存してfile response.binを実行した場合は、使用されている圧縮アルゴリズムが表示されます(おそらくgzipまたはdeflate)。

これを解決するには、あなたのための応答を解凍するカール頼む:

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

うわー!私はそれを考えたことがないだろう...それは私に読める応答を与えるが、私が期待した応答ではない: "ns1:Client.NoSOAPActionいいえSOAPActionヘッダー!cffar23070v04.usdc2.oraclecloud.com"任意のアイデア?ご協力いただきありがとうございます! :) – elunap

+1

エラーメッセージに「SOAPActionヘッダーなし」と表示されます。 XMLエンベロープにはSOAPActionが含まれていません。どのSOAPActionがサポートされているかは、Webサービスのドキュメントを参照してください。それがあなたを助けたら、答えをアップアップしてください。 :) – ThoriumBR

関連する問題