我正在使用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文件。