1

この Web サービスへの呼び出しは、端末から呼び出されたときに機能します...

curl -X POST -d @request.xml "http://some web site"

この例では、request.xml は、curl 呼び出しで使用されるデータを含む整形式の xml ステートメントで構成されるファイルです。これは問題なく機能し、サーバーは期待される応答を POST に返します。

これがxmlステートメントです(独自の値を非表示にするためにいくつかの変更を加えています)

<account token="999999999999999999999" username="test@emailaccount.com" password="111111122222233333334444455555"><login ver="3.0.7" mdmac="02:00:00:00:00:00" os="7.0" lan="en" bndl="APPL" mod="iPhone"/></account>

次の Java スクリプト コマンドを使用して Instruments 内部から同じ Web サービスを呼び出そうとすると、サーバーが無効なパラメータ ステートメントで応答します。

    var host = target.host();

    var loginXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
    <account token=\"999999999999999999999\" username=\"test@emailaccount.com\" password=\"111111122222233333334444455555\">
    <login ver=\"3.0.7\" mdmac=\"02:00:00:00:00:00\" os=\"7.0\" lan=\"en\" bndl=\"APPL\" mod=\"iPhone\"/>
    </account>";
    var xmlLength = loginXML.length + 1;
    var result = host.performTaskWithPathArgumentsTimeout("/usr/bin/curl", 
                                                 ["-X POST",
                                                  "-d " + loginXML, 
                                                  // "-v", 
                                                  "http://some web site"], 
                                                 5);

    UIALogger.logDebug("exitCode: " + result.exitCode);
    UIALogger.logDebug("stdout: " + result.stdout);
    UIALogger.logDebug("stderr: " + result.stderr);
4

2 に答える 2

0

XML コンテンツを引用符で囲んでみてください。つまり、以下を置き換えます。

    "-d " + loginXML, 

と:

    "-d '" + loginXML + "'", 

curl の呼び出しで。<?xmlこれがないと、 の値として扱われ-d、残りの XML はさらに (無効な) パラメータとして扱われる可能性があります。

于 2013-08-29T15:36:51.430 に答える