如何在RCurl中使用HTTP身份验证

时间:2019-07-16 09:07:05

标签: r soap wsdl rcurl

我想设置一个小的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 .:上面的代码替换了实际的用户名和密码。

0 个答案:

没有答案