2010-03-18 98 views
2

關於捲曲有很多關於Stackoverflow的問題,但我無法弄清楚我在做什麼,我不應該這樣做。 我想調用一個使用Jersey API編寫的RESTful服務,並試圖向它發送一個xml字符串,並且我得到應該是媒體類型錯誤的HTTP 415錯誤。curl POST到RESTful服務

在這裏,在我的shell腳本調用第一個服務:

ABC = curl http://gf...:8080/InChItoD/inchi/3dstructure?InChIstring=$inchi

回聲$ ABC(這工作得很好,它返回下面給出的輸出。)

發佈此XML字符串第二服務

高清= curl -d $abc -H "Content-Type:text/xml" http://gf...:8080/XML2G/xml3d/gssinput

我得到以下錯誤:

... ... HTTP狀態415狀態報告消息描述。服務器拒絕此請求,因爲請求實體的格式不是請求的資源所支持的格式().Apache Tomcat/6.0 0.26

這是XML字符串的樣本,我嘗試後

<?xml version="1.0"?><molecule xmlns="http://www.xml-cml.org/schema"> <atomArray> <atom id="a1" elementType="N" formalCharge="1" x3="0.997963" y3="-0.002882" z3="-0.004222"/> <atom id="a2" elementType="H" x3="2.024650" y3="-0.002674" z3="0.004172"/> <atom id="a3" elementType="H" x3="0.655444" y3="0.964985" z3="0.004172"/> <atom id="a4" elementType="H" x3="0.649003" y3="-0.496650" z3="0.825505"/> <atom id="a5" elementType="H" x3="0.662767" y3="-0.477173" z3="-0.850949"/> </atomArray> <bondArray> <bond atomRefs2="a1 a2" order="1"/> <bond atomRefs2="a1 a3" order="1"/> <bond atomRefs2="a1 a4" order="1"/> <bond atomRefs2="a1 a5" order="1"/> </bondArray></molecule>

在此先感謝

回答

2

首先,你可以試試你的報價$abc字符串。例如curl -d "$abc"。如果這沒有幫助,請嘗試轉義這些元字符,如雙引號和正斜槓。例如

abc=$(echo "$abc" | sed 's|\(["/]\)|\\&|g') 
+0

轉義這些元字符不能解決它。通過將$ abc放在雙引號中,我不再看到HTTP 415錯誤,但是我沒有看到它正在發佈到我的服務中。 – 2010-03-18 13:28:48

+0

謝謝!我的服務發生了錯誤,而不是在捲曲聲明中。我的意思是我必須糾正我的服務中的錯誤,並在curl中使用雙引號。再次感謝。 – 2010-03-18 19:16:44