Зашифрованный запрос POST с телом JSON на R

Я пытаюсь использовать R для отправки зашифрованного запроса в API.

В частности, запрос /v3/orders/.

Это требует использования API key и secret, а также увеличения nonce.

Использование библиотек openssl, jsonlite и httr:

Тело должно быть закодировано в формате JSON:

book<-"btc_eth"
side<-"sell"
major<-"0.1"
price<-"100"
type<-"limit"

Payload<-toJSON(data.frame(book=book,side=side,major=major,price=price,type=type))

Также требуется заголовок авторизации, созданный с помощью sha256 зашифрованного файла signature.

N<-NONCE() # "1503033312"

method<-"POST"

Path<-"/v3/orders/"

Signature<-sha256(paste0(N,method,Path,Payload),secret)

header<-paste0("Bitso ",key,":",N,":",Signature)

В итоге запрос должен выглядеть так:

url<-"https://api.bitso.com/v3/orders/"

r<-POST(url, body = Payload, add_headers(Authorization=header))

Раньше я мог отправлять запросы с пустой полезной нагрузкой в ​​этот API, но этот вызов отправляет ошибку неподдерживаемого типа мультимедиа, что-то о том, как я кодирую JSON, вызывает это.

Примеры Ruby и PHP о том, как разместить этот запрос здесь.


person Nicholas Bucher Ampudia    schedule 18.08.2017    source источник


Ответы (2)


Поскольку у меня нет ключа, чтобы попробовать, это ответ из случая, с которым я когда-то сталкивался — возможно, вы захотите немного изменить свой вызов JSON. toJSON помещает квадратную скобку с каждой стороны вашего вызова. Итак, вам нужно удалить их:

# Go from
Payload<- jsonlite::toJSON(data.frame(book=book,side=side,major=major,price=price,type=type))
Payload
[{"book":"btc_eth","side":"sell","major":"0.1","price":"100","type":"limit"}] 

# To
Payload <- gsub("\\[|\\]", "", Payload)
Payload
{"book":"btc_eth","side":"sell","major":"0.1","price":"100","type":"limit"}

Дайте мне знать, если это сработает,

Лучший,

Колин

person Colin FAY    schedule 18.08.2017
comment
Я смог опубликовать свой запрос, удаление скобок имело решающее значение. Спасибо за помощь. Я ответил на свой вопрос. - person Nicholas Bucher Ampudia; 22.08.2017

Итак, я, наконец, смог отправить запрос.

Я должен поблагодарить Колина Фэя за его ответ о том, как убрать скобки.

Дело в том, что заголовок должен был быть создан с телом JSON без квадратных скобок, но тело должно было быть отправлено в виде списка с автоматическим кодированием JSON следующим образом:

NC<-NONCE()

mthd<-"POST"

Pyld<- toJSON(data.frame(book=book,side=side,major=major,price=price,type=type))

Pyld <- gsub("\\[|\\]", "", Pyld)

body<-list(book=book,side=side,major=major,price=price,type=type)

url<-"https://api.bitso.com/v3/orders/"

Pth<-"/v3/orders/"

hdr<-paste0("Bitso ",ky,":",NC,":",sha256(paste0(NC,mthd,Pth,Pyld),scrt))

r<-POST(url, body = body, add_headers(Authorization=hdr),encode="json",verbose())
person Nicholas Bucher Ampudia    schedule 22.08.2017
comment
Откуда NONCE? - person Hack-R; 08.07.2018
comment
'NONCE' — это функция, которая возвращает увеличивающееся уникальное число, как того требует API. - person Nicholas Bucher Ampudia; 10.07.2018