2013-08-29 80 views
1

調用時在終端捲曲呼叫失敗時,爲什麼崗位工作這調用Web服務從終端調用時的作品...利用我

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

在這個例子中,request.xml是由形成良好的xml語句組成的文件,其中包含curl調用所使用的數據。這工作得很好,服務器將預期的響應返回給POST。

這裏是XML語句(有一些變化隱藏專有值)

<account token="999999999999999999999" username="[email protected]" 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腳本命令來調用內部儀器相同的Web服務,服務器響應用一個無效的參數語句。

var host = target.host(); 

    var loginXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> 
    <account token=\"999999999999999999999\" username=\"[email protected]\" 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); 
+0

也許HTTP標頭中有某些東西? – Gougou

+0

我試過了,沒有這些標題:-H Content-Type =「text/xml」和-H Content-Length = 。沒有任何幫助,所以爲了清楚起見,我將它們排除在外。 –

+0

格式爲'-H「Content-Type:text/xml」'。但是這不能解決你的'無效參數'錯誤 - 你得到的錯誤是來自curl本身,而不是目標站點。 –

回答

0

嘗試將XML內容放在引號中;也就是說,替換:

"-d " + loginXML, 

有:

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

呼叫捲曲。如果沒有,可能會將<?xml作爲-d的值,將其餘的XML作爲更多(無效)參數。

+0

感謝您的提示。我應該把它放在我的OP中,我已經試過了,但沒有奏效。 –

+0

如果您使用完整的XML文件(或甚至是精簡版本)而不是對文件的引用手動運行卷曲,它會起作用嗎? –

+0

是的,它在兩種情況下都可以正常工作。當我用curl命令中嵌入的xml運行它時,必須將xml括在單引號中。像這樣:curl -X POST -d''「http://一些網站 –

0

這是我的問題的答案:從Instruments調用的curl考慮參數之後的空白空間作爲值的一部分。例如: -d <?xml....> 認爲「d」和「<」之間的空格是參數值的一部分。指示參數值的正確方法是這樣的: -d<?xml....>