为什么 R HTTR 内容语句不生成预期的请求正文



我正在使用R调用Cybersource API。当我使用 GET 请求时,我获得了 200 的成功响应。当我阅读响应的正文而不是取回 csv 数据时,我得到了一个指向 csv 文件路径的路径。我想知道我做错了什么。

content(request)

 "/space/download_reports/output/dailyreports/reports/2018/10/27/testrest/TRRReport-7931d82d-cf4a-71fa-e053-a2588e0ab27a.csv"

content(request)的结果应该是数据而不是文件路径。

这是一个代码

library('httr')
merchant<-'testrest'
vcdate<-'Wed, 29 May 2019 10:09:48 GMT'
ho<-'apitest.cybersource.com'
URL<-'https://apitest.cybersource.com/reporting/v3/report-downloads?organizationId=testrest&reportDate=2018-10-27&reportName=TRRReport'
sign<-'keyid="08c94330-f618-42a3-b09d-e1e43be5efda", algorithm="HmacSHA256", headers="host (request-target) v-c-merchant-id", signature="7cr6mZMa1oENhJ5NclGsprmQxwGlo1j3VjqAR6xngxk="'
req<-GET(URL, add_headers(.headers=c('v-c-merchant-id'=merchant, 'v-c-date'=vcdate, 'Host'=ho, 'Signature'=sign)))
content(req)

这是 Cybersource 测试 API,您可以在其中验证生成的数据。

https://developer.cybersource.com/api/reference/api-reference.html

我正在尝试在报告选项卡下下载报告

老实说,我不太确定这里发生了什么,但我确实认为我能够让一些东西发挥作用。

API 似乎喜欢以application/hal+json格式返回数据,这不是httr通常请求的格式。你可以说你会接受任何accept("*")所以你可以用以下方法提出你的要求:

req <- GET(URL, add_headers('v-c-merchant-id'=merchant, 
  'v-c-date'=vcdate, 
  'Host'=ho, 
  'Signature'=sign), accept("*"))

现在我们实际上正在获取我们想要的数据,但httr不知道如何自动解析它。所以我们需要自己解析它。这似乎可以解决问题

readr::read_csv(rawToChar(content(req)), skip=1)

似乎有一个标题行,我们跳过skip=,然后将其解析为带有readr::read_csv的CSV文件。

最新更新