无法在R中存储Web服务响应

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法在R中存储Web服务响应相关的知识,希望对你有一定的参考价值。

我有一个SOAP请求,在Rstudio中获得正确的响应,如下面的屏幕截图所示。用于请求响应的代码是

library(RCurl)

headerFields = 
  c(Accept = "text/xml",
    'Content-Type' = "text/xml; charset=utf-8",
    SOAPAction = "")

body = '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://www.xxxxx.com/esotservice/schema">
   <S:Header/>
<S:Body>
<sch:OwnerOnlyInquiryRequest>
<sch:RequestHeader>
<sch:ClientSystem>ePRS</sch:ClientSystem>
</sch:RequestHeader>
<sch:RequestParameterList>
<sch:RequestParam>12174391</sch:RequestParam>
</sch:RequestParameterList>
<sch:RequestType>CESEID</sch:RequestType>
<sch:PeckingOrder>Pricing</sch:PeckingOrder>
<sch:ViewType>Pricing</sch:ViewType>
</sch:OwnerOnlyInquiryRequest>
</S:Body>
</S:Envelope>'

R <- curlPerform(url = "http://slsesotdevt1.ute.xxxx.com:10149/esot/esotservice.wsdl",
            httpheader = headerFields,
            postfields = body, verbose=TRUE)

我在RStudio得到的回应是

我的目的是将webservice响应(图像中的黑色文本)存储到代码中的对象R中,对象类为XML,这样我就可以使用XML包来进一步处理数据。但是,当我说print(R)时,我得到的唯一回应是

在搜索网络后,响应0表示一切正常。但有没有办法在R中实际存储响应?如果我复制粘贴Rstudio中第一个图像中出现的黑色文本并将其提供给xml函数,如xmlTreeParse,它将被正确处理。

答案

您需要使用basicTextGatherer获取响应正文。

例如(取自https://cran.r-project.org/web/packages/RCurl/RCurl.pdf):

library(RCurl)

headerFields = 
  c(Accept = "text/xml",
    'Content-Type' = "text/xml; charset=utf-8",
    SOAPAction = "")

body = '<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sch="http://www.xxxxx.com/esotservice/schema">
   <S:Header/>
<S:Body>
<sch:OwnerOnlyInquiryRequest>
<sch:RequestHeader>
<sch:ClientSystem>ePRS</sch:ClientSystem>
</sch:RequestHeader>
<sch:RequestParameterList>
<sch:RequestParam>12174391</sch:RequestParam>
</sch:RequestParameterList>
<sch:RequestType>CESEID</sch:RequestType>
<sch:PeckingOrder>Pricing</sch:PeckingOrder>
<sch:ViewType>Pricing</sch:ViewType>
</sch:OwnerOnlyInquiryRequest>
</S:Body>
</S:Envelope>'

h = basicTextGatherer()
R <- curlPerform(url = "http://slsesotdevt1.ute.xxxx.com:10149/esot/esotservice.wsdl",
            httpheader = headerFields,
            postfields = body, verbose=TRUE,
writefunction = h$update)
body <- h$value()

以上是关于无法在R中存储Web服务响应的主要内容,如果未能解决你的问题,请参考以下文章

如何将代码片段存储在 mongodb 中?

无法使用 jQuery 在 html 中获取来自 REST Web 服务的 json 响应

如何从片段中的 JSON 响应中的对象获取数据

解析来自 Restful Web 服务的响应的 C# 代码

markdown 在Intel Nuc上设置Ubuntu Web服务器,步骤和代码片段

无法从 Alamofire 的 Swift 3 中的 Web 服务的 PATCH API 调用中获得响应