2010-03-18 102 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