【问题标题】:How to do a SOAP request for EUR-Lex API with R?如何使用 R 对 EUR-Lex API 进行 SOAP 请求?
【发布时间】:2020-07-01 01:29:16
【问题描述】:

您将如何使用 R 为 EUR-Lex 的 API 发出 SOAP 请求?

EUR-Lex 是一个包含许多法律行为的欧盟数据库。在他们的网络服务手册中,他们描述了他们的SOAP 系统,但没有描述如何使用 R。我已经尝试了一段时间来雇用httrRCurl,但没有运气。我想使用 R 而不是 SOAPUI。

这里有人有这方面的经验吗?

从下面的链接中,我应该如下定义正文吗?

body <- "<sear:searchRequest>
<sear:expertQuery>${expert query}</sear:expertQuery> <sear:page>${page}</sear:page>
<sear:pageSize>${pageSize}</sear:pageSize> <sear:searchLanguage>${search language
</sear:searchLanguage>
          </sear:searchRequest>"

然后如何将它与headerfields 结合使用RCurlhttr 包?

以下三个答案似乎相关,但我不知道如何将它们应用于我的 EUR-Lex 示例:

  1. How to convert SOAP request curl to RCurl
  2. SOAP Client with WSDL for R
  3. SOAP request in R

EUR-Lex API 链接:

  1. WSDL:https://eur-lex.europa.eu/eurlex-ws?wsdl
  2. 手册:https://eur-lex.europa.eu/content/tools/webservices/SearchWebServiceUserManual_v2.00.pdf

【问题讨论】:

  • 7 月更新:我现在正尝试通过欧盟出版办公室的 SPARQL 访问 EUR-Lex。总的来说,这似乎更适用于 R。

标签: r web-services soap httr rcurl


【解决方案1】:

你链接到的答案有很好的例子可以解决。添加来自 WSDL 的各种 URL 和手册中的信息,您最终会得到以下代码。

不幸的是,由于 EUR-Lex 安全限制,我无法对此进行测试(您需要他们提供的用户名和密码,我假设您已经拥有),但它至少应该让您走上正轨。

library(RCurl)

headerFields =
  c(Accept = "text/xml",
    Accept = "multipart/*",
    'Content-Type' = "text/xml; charset=utf-8",
    SOAPAction = "https://eur-lex.europa.eu/EURLexWebService/doQuery")

body = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:sear="http://eur-lex.europa.eu/search">
    <soap:Header>
        <wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
        <wsse:UsernameToken wsu:Id="UsernameToken-3" xmlns:wsu="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsse:Username>${EUR-Lex username}</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-
wss-username-token-profile-1.0#PasswordText">${WS password}</wsse:Password>
        </wsse:UsernameToken>
        </wsse:Security>
   </soap:Header> 
   <soap:Body>
      <sear:searchRequest>
         <sear:expertQuery>${expert query}</sear:expertQuery>
         <sear:page>${page}</sear:page>
         <sear:pageSize>${pageSize}</sear:pageSize>
         <sear:searchLanguage>${search language}</sear:searchLanguage>
      </sear:searchRequest>
   </soap:Body>
</soap:Envelope>'

reader = basicTextGatherer()

curlPerform(url = "https://eur-lex.europa.eu/EURLexWebService",
                          httpheader = headerFields,
                          postfields = body,
                          writefunction = reader$update
                          )

xml <- reader$value()
xml

【讨论】:

  • 非常感谢!您是否知道一种巧妙的方法来自动将某些值替换为 body 对象中的不同搜索项,例如{expert query}、{page}、{pageSize} 和 {search language}?我希望能够保存例如expert_query
  • 更新:您的回答帮了很多忙,但我还没有完全做到。我现在的问题是收到 415 错误:“不支持的媒体类型”。当我弄清楚这一点时,我会再次发布。
  • 嗯,我不确定您为什么会收到 415 错误。但是,对于替换变量,您可以尝试 str_glue
猜你喜欢
  • 1970-01-01
  • 2021-10-04
  • 2017-03-09
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多