Почему оператор содержимого 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)

Вот тестовый API Cybersource, где вы можете проверить полученные данные.

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

Я пытаюсь загрузить отчет на вкладке отчетов

Вы пытались использовать download.file или любую другую функцию, чтобы загрузить файл, когда у вас есть ссылка?

cory 29.05.2019 17:43

Вам будет легче помочь, если вы включите простой воспроизводимый пример с образцом ввода и желаемым выводом, который можно использовать для тестирования и проверки возможных решений. Вы уверены, что ответ должен быть данными? Похоже, он пытается отправить вам перенаправление. Можете ли вы процитировать соответствующие части документации API?

MrFlick 29.05.2019 17:46

Нет, нет. я буквально использую запрос на получение, чтобы вызвать API и контекст (запрос), чтобы прочитать тело mof ythe API. В почтальоне он показывает мне данные csv, а не путь. Как мне использовать download.file. Также /space/download_reports/output/dailyreports/reports/2018/10/‌​27/testrest/TRRRepor‌​t-7931d82d-cf4a-71fa‌​-e053-a2588e0ab27a.c‌​sv не выглядит как URL-путь

charles elliott 29.05.2019 17:50

Это похоже на относительный путь. Я подозреваю, что корень похож на тот, к которому вы обращаетесь для других вызовов API. Что касается использования download.file, вы пробовали ?download.file?

cory 29.05.2019 17:55

Не знаю, как использовать ?download.file в запросе httr GET. Я отредактировал свой вопрос и разместил свой код. @MrFlick Да, это должны быть данные. Я проверил это в почтальоне.

charles elliott 29.05.2019 18:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
5
502
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Честно говоря, я не совсем уверен, что здесь происходит, но я думаю, что смог заставить что-то работать.

Похоже, что 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.

Другие вопросы по теме