通过OData读取数据:如何通过curl / RCurl指定身份验证方案?

时间:2014-07-23 09:53:31

标签: r https odata rcurl

我想通过HTTPS OData连接读取一些数据,数据源需要Basic身份验证方案。我熟悉常见的curl / RCurl选项(例如usernameuserpwdcainfo),但我不确定如何传递身份验证方案信息。

这是一个同事为另一个应用程序工作的一些C#代码:

var bind = new HttpsTransportBindingElement();
bind.AuthenticationScheme = System.Net.AuthenticationSchemes.Basic;

所以我想我需要找出R {curl世界中.NETSystem.Net.AuthenticationSchemes.Basic的RCurl等价物是什么?


这是我到目前为止所提出的:

忽略任何身份验证信息

web_page = getURL(
  url = "https://xxxx.sapbydesign.com/sap/byd/odata/cc_home_analytics.svc/path/to/ressource", 
  username = "<username>",
  userpwd = "*****",
  cainfo = "inst/ssl/ca-bundle.pem"
)

这是我得到的答案(通过谷歌浏览器从德语翻译):

<DOCTYPE html PUBLIC "- / / W3C / / DTD XHTML 1.0 Strict / / EN"
    "Http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <Meta name = "generator" content =
  "HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org" />

  <title> Logon Error Message </ title>
  <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
  <style type="text/css">
  / * <! [CDATA [* /
      body {font-family: tahoma, helvetica, sans-serif; color: # 333333; background-color: # FFFFFF; } Td {font-family: tahoma, helvetica, sans-serif; font-size: 70%; color: # 333333; {H1} H2 {} } P {font-family: tahoma, helvetica, sans-serif; color: # 333333; margin-top: 4px; margin-bottom: 4px; Ul {} Li} {font-family: tahoma, helvetica, sans-serif; color: # 33333; margin-top: 4px; Emphasize} {color: # 333333; background-color:. # C8E3FF; padding: 5px;} note {color: # CC6600;. } A {font-family: tahoma, helvetica, sans-serif; text-decoration: underline; color: # 336699; } A: visited {color: # 001166; } A: hover {text-decoration: none; }
      / *]]> * /
  </ Style>
</ Head>

<body>
  <table cellpadding="0" cellspacing="0" border="0" width="100%">
    <tr>
      <td>
        <h1> Login Failed </ h1> <br />

        <h2> What happened? </ h2>

        <p> Calling the URL
        https://my310094.sapbydesign.com/sap/byd/odata/cc_home_analytics.svc/RPCRMQUFU_Q0001QueryResults
        was aborted due to incorrect credentials. </ p>
      </ Td>
    </ Tr>

    <tr>
      <td> </ td>
    </ Tr>

    <tr>
      <td class="emphasize">
        <strong> Note </ strong> <br />

        <ul>
          <li> The application was running in the system KHN. </ li>

          <li> The application was for the client 015 and the user and the
          Performed language. </ Li>
        </ Ul>
      </ Td>
    </ Tr>

    <tr>
      <td> </ td>
    </ Tr>

    <tr>
      <td>
        </ p>

        <h2> What can you do? </ h2>

        <ul>
          <li> Check the indication of the clients, users and
          the password for typos. </ li>

          <li> If you do not have a user ID, contact
          your system administrator. </ li>
        </ Ul> <br />

        <p class="note"> error code:
        ICF-LE-https-c:015-l:-u:-a:1-c:015-l:-r:0-T:1-C:1-U:8-P:-L:6-X:00163E0746C81EE484C92B972817350C_00163E0746C81EE484C92B969D80750C_1-x:00163E0746C81EE484C92B972817550C</p><br />


        <p> HTTP 401 - Unauthorized <br /> </ p>

        <p> Your SAP Internet Communication Framework Team </ p>
      </ Td>
    </ Tr>
  </ Table>
</ Body>
</ Html>

指定httpauth

根据this post,我尝试了以下内容:

web_page = getURL(
  url = "https://xxxx.sapbydesign.com/sap/byd/odata/cc_home_analytics.svc/path/to/ressource", 
  username = "<username>",
  userpwd = "*****",
  cainfo = "inst/ssl/ca-bundle.pem",
  httpauth = "CURLAUTH_BASIC"
)

这一次,答案看起来不同((通过谷歌浏览器从德语翻译):

<DOCTYPE html PUBLIC "- / / W3C / / DTD XHTML 1.0 Strict / / EN"
    "Http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <Meta name = "generator" content =
  "HTML Tidy for Linux/x86 (vers 25 March 2009), see www.w3.org" />

  <title> Logon Error Message </ title>
  <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
  <style type="text/css">
/ * <! [CDATA [* /
  body {font-family: tahoma, helvetica, sans-serif; color: # 333333; background-color: # FFFFFF; } Td {font-family: tahoma, helvetica, sans-serif; font-size: 70%; color: # 333333; {H1} H2 {} } P {font-family: tahoma, helvetica, sans-serif; color: # 333333; margin-top: 4px; margin-bottom: 4px; Ul {} Li} {font-family: tahoma, helvetica, sans-serif; color: # 33333; margin-top: 4px; Emphasize} {color: # 333333; background-color:. # C8E3FF; padding: 5px;} note {color: # CC6600;. } A {font-family: tahoma, helvetica, sans-serif; text-decoration: underline; color: # 336699; } A: visited {color: # 001166; } A: hover {text-decoration: none; }
  / *]]> * /
  </ Style>
</ Head>

<body>
  <table cellpadding="0" cellspacing="0" border="0" width="100%">
    <tr>
      <td>
        <h1> Login Failed </ h1> <br />

        <h2> What happened? </ h2>

        <p> Calling the URL
        https://my310094.sapbydesign.com/sap/byd/odata/cc_home_analytics.svc was
        aborted due to incorrect credentials. </ p>
      </ Td>
    </ Tr>

    <tr>
      <td> </ td>
    </ Tr>

    <tr>
      <td class="emphasize"> <strong> Note </ strong> <br />
      The application was running in the system KHN. Here were no
      Credentials provided. </ Td>
    </ Tr>

    <tr>
      <td> </ td>
    </ Tr>

    <tr>
      <td>
        </ p>

        <h2> What can you do? </ h2>

        <ul>
          <li> If you do not have a user ID, contact
          your system administrator. </ li>
        </ Ul> <br />

        <p class="note"> error code:
        ICF-LE-https-c:015-l:-u:-a:0-c:015-l:-r:99-T:-C:1-U:-P:-L:6-X:00163E0746C81EE484CA0C65DC12398A_00163E0746C81EE484CA0C65D826798A_1-x:00163E0746C81EE484CA0C65DC12598A</p><br />


        <p> HTTP 401 - Unauthorized <br /> </ p>

        <p> Your SAP Internet Communication Framework Team </ p>
      </ Td>
    </ Tr>
  </ Table>
</ Body>
</ Html>

1 个答案:

答案 0 :(得分:6)

使用httr非常简单:

library(httr)

url <- "https://xxxx.sapbydesign.com/sap/byd/odata/cc_home_analytics.svc/path/to/ressource"
r <- GET(url, authenticate("<username>", "*****", "basic"))
stop_for_status(r)
content(r)

(在httr 0.4中,您将能够删除“basic”,因为基本身份验证现在是默认值)