首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用curl将编码的数据从普通文件发布到API

使用curl将编码的数据从普通文件发布到API
EN

Stack Overflow用户
提问于 2016-07-13 14:22:39
回答 1查看 830关注 0票数 0

我需要将xml数据发布到API中,使用curl似乎是个好主意。这是命令行curl,而不是PHP或libcurl中的curl,至少一开始是这样的。

要发布的xml应该如下所示:

代码语言:javascript
复制
<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示例

代码语言:javascript
复制
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 (没有编码,也没有换行符)。

我尝试了以下方法,只在服务器端出现错误(服务器超出我的能力范围,支持非常慢,所以我不能总是说什么错误):

代码语言:javascript
复制
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。同样的事情,如果我能“--数据--二进制”到“公正”--数据。

我也试过:

代码语言:javascript
复制
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中。

代码语言:javascript
复制
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应该能够为我处理的事情?

EN

回答 1

Stack Overflow用户

发布于 2016-07-14 13:55:10

考虑试试这个..。

代码语言:javascript
复制
curl -X POST -F "fileobj=@${file}" https://server-and-domain/xml/book.aspx

如果类似于您的示例的尝试失败,这将成功地发布到nginx服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38354371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档