我需要将xml数据发布到API中,使用curl似乎是个好主意。这是命令行curl,而不是PHP或libcurl中的curl,至少一开始是这样的。
要发布的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。同样的事情,如果我能“--数据--二进制”到“公正”--数据。
我也试过:
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"也是如此(但是如果我不需要手动编码文件的话,我真的更不喜欢手动编码)。
在中,我有一个解决方案:在"myfile.txt“中,我添加"Data=”前面的“Data=”,然后将它像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不过,我更愿意不必这样做,而是让"myfile.txt“不受前面的参数名称的影响,我猜想这是curl应该能够为我处理的事情?
发布于 2016-07-14 13:55:10
考虑试试这个..。
curl -X POST -F "fileobj=@${file}" https://server-and-domain/xml/book.aspx如果类似于您的示例的尝试失败,这将成功地发布到nginx服务器。
https://stackoverflow.com/questions/38354371
复制相似问题