我想设置一个小的R脚本,使用RCurl的CurlPerform
函数从SOAP / WSDL Web服务请求数据。远程服务器需要HTTP身份验证。
我发现RCurl的getURL
函数(例如getURL("https://api.picloud.com/job/?jids=12", userpwd="key:secret", httpauth = 1L)
)可以用于身份验证。
使用getURL
可以提供有效的服务器/ Web服务/ WSDL答复;即身份验证似乎可以正常工作。
但是,我接下来想使用RCurl的CurlPerform
函数从Web服务中获取数据。如何与CurlPerform
一起使用HTTP身份验证?
这是R脚本的代码:
library(RCurl)
library(XML)
#####################
headerfields = c(
Accept = "text/xml",
Accept = "multipart/*",
SOAPAction = "http://www.umwelt.sachsen.de/umwelt/infosysteme/hwims/webservices/spurwerte-ws?wsdl",
'Content-Type' = "text/xml; charset=utf-8"
)
#####################
body = "<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:spur='http://spurwerte.webservice.hwims.t_systems_mms.com/' xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
<soapenv:Body>
<spur:liefereWerteZuSpur2>
<spurIdentifikator>
<messstationKennziffer>501060</messstationKennziffer>
<messstationTyp>Pegel</messstationTyp>
<physikalischeGroesse>W</physikalischeGroesse>
<spurTyp>Ziel</spurTyp>
</spurIdentifikator>
<startZeitpunkt>2019-05-01T00:00:00</startZeitpunkt>
<endeZeitpunkt>2019-05-02T00:00:00</endeZeitpunkt>
<statistischeZeitangaben>true</statistischeZeitangaben>
</spur:liefereWerteZuSpur2>
</soapenv:Body>
</soap:Envelope>"
#####################
reader = basicTextGatherer()
getURL("http://www.umwelt.sachsen.de/umwelt/infosysteme/hwims/webservices/spurwerte-ws?wsdl", userpwd="usr:pwd", httpauth = 1L)
curlPerform(
url = "http://www.umwelt.sachsen.de/umwelt/infosysteme/hwims/webservices/spurwerte-ws?wsdl",
httpheader = headerfields,
postfields = body,
writefunction = reader$update,
verbose = TRUE
)
xml <- reader$value()
xml
似乎通过getURL
进行的身份验证有效,但是CurlPerform
传递了未经身份验证的请求。服务器回答:“此请求需要HTTP身份验证”
N.B .:上面的代码替换了实际的用户名和密码。