Я использую 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)
Вот тестовый API Cybersource, где вы можете проверить полученные данные.
https://developer.cybersource.com/api/reference/api-reference.html
Я пытаюсь загрузить отчет на вкладке отчетов
Вам будет легче помочь, если вы включите простой воспроизводимый пример с образцом ввода и желаемым выводом, который можно использовать для тестирования и проверки возможных решений. Вы уверены, что ответ должен быть данными? Похоже, он пытается отправить вам перенаправление. Можете ли вы процитировать соответствующие части документации API?
Нет, нет. я буквально использую запрос на получение, чтобы вызвать API и контекст (запрос), чтобы прочитать тело mof ythe API. В почтальоне он показывает мне данные csv, а не путь. Как мне использовать download.file. Также /space/download_reports/output/dailyreports/reports/2018/10/27/testrest/TRRReport-7931d82d-cf4a-71fa-e053-a2588e0ab27a.csv не выглядит как URL-путь
Это похоже на относительный путь. Я подозреваю, что корень похож на тот, к которому вы обращаетесь для других вызовов API. Что касается использования download.file
, вы пробовали ?download.file
?
Не знаю, как использовать ?download.file в запросе httr GET. Я отредактировал свой вопрос и разместил свой код. @MrFlick Да, это должны быть данные. Я проверил это в почтальоне.
Честно говоря, я не совсем уверен, что здесь происходит, но я думаю, что смог заставить что-то работать.
Похоже, что 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=
, а затем анализируем остальную часть как файл CSV с помощью readr::read_csv
.
Вы пытались использовать
download.file
или любую другую функцию, чтобы загрузить файл, когда у вас есть ссылка?