1

当从终端调用时,此对 Web 服务的调用有效...

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

在此示例中,request.xml 是一个由格式良好的 xml 语句组成的文件,其中包含 curl 调用使用的数据。这工作得很好,服务器将预期的响应返回给 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

这是我的问题的答案:从 Instruments 调用的 curl 将参数后的空格视为值的一部分。例如: -d <?xml....> 将“d”和“<”之间的空格视为参数值的一部分。表示参数值的正确方法是这样的: -d<?xml....>

于 2013-08-30T13:55:55.613 回答
0

尝试将您的 XML 内容放在引号中;也就是说,替换:

    "-d " + loginXML, 

和:

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

在 curl 的调用中。如果没有这个,它可能会被<?xml视为 的值-d,而 XML 的其余部分则被视为进一步的(无效)参数。

于 2013-08-29T15:36:51.430 回答