我需要将xml数据发布到API,使用curl似乎是一个好主意。这个命令行卷曲而不是在PHP或libcurl中卷曲,至少不是从头开始。
要发布的xml应该如下所示:
<SearchRequest>
<LoginDetails>
<Login>******</Login>
<Password>******</Password>
<Locale></Locale>
<AgentReference></AgentReference>
</LoginDetails>
<SearchDetails>
<ArrivalDate>2016-08-01</ArrivalDate>
<Duration>2</Duration>
<RegionID>279</RegionID>
<MealBasisID>0</MealBasisID>
<MinStarRating>0</MinStarRating>
<ContractSpecialOfferID>0</ContractSpecialOfferID>
<RoomRequests>
<RoomRequest>
<Adults>2</Adults>
<Children>0</Children>
<Infants>0</Infants>
</RoomRequest>
</RoomRequests>
</SearchDetails>
</SearchRequest>
但它是以编码形式发布的。
根据规范,完整的请求应如下所示:
HTTP帖子示例
POST /xml/book.aspx HTTP/1.1
Content-Type application/x-www-form-urlencoded
Host servername-xml-test.somedomain.co.uk
Content-Length 331
Expect 100-continue
Proxy-Connection Keep-Alive
Data=%3CSearchRequest%3E%0D%0A%20%20%3CLoginDetails%3E%0D%0A%20%20%20%20%3CLog
in%3E%3C%2FLogin...cutting out all that encoded xml here... %3C%2FSearchRequest%3E
基本上我所拥有的是一个发布到的URL和要在文件中发布的实际XML(未编码且没有换行符)。
我尝试了以下内容,只发生了服务器端的错误(服务器超出了我的范围,支持非常慢,所以我不能总是说错误):
curl --header "Content-Type:application/x-www-form-urlencoded" \
--header "Proxy-Connection:Keep-Alive" \
-X POST \
--data-binary "Data=@myfile.txt" \
https://server-and-domain/xml/book.aspx
这将返回Systems.exception。如果我能用同样的东西&#34; - 数据二进制&#34;只是&#34; - 数据&#34;。
我也尝试过:
curl --header "Content-Type:application/x-www-form-urlencoded" \
--header "Proxy-Connection:Keep-Alive" \
-X POST \
--form "Data=@myfile.txt" \
https://server-and-domain/xml/book.aspx
这会返回一些看起来更复杂的错误(如果你没有关闭.net中的详细错误,你会得到什么)。所以我猜这个请求与服务器的期望相差甚远。
同样适用于--form "Data=@myencodedfile.txt"
(但我真的不希望不必手动编码文件,如果我不必)。
我的解决方法 我有一个解决方法:在&#34; myfile.txt&#34;我添加了前面的&#34; Data =&#34;然后我就像ascii或二进制数据一样发布到URL。
curl --header "Content-Type:application/x-www-form-urlencoded" \
--header "Proxy-Connection:Keep-Alive" \
-X POST \
--data-binary "@myfile.txt" \
https://server-and-domain/xml/book.aspx
然而,我宁愿不必这样做,而是保持&#34; myfile.txt&#34;从前面的参数名称中解脱出来,我猜测这是卷曲应该能为我处理的东西吗?
答案 0 :(得分:0)
考虑尝试这个......
curl -X POST -F "fileobj=@${file}" https://server-and-domain/xml/book.aspx
这成功发布到nginx服务器,其中类似于您的示例的尝试失败。