POST 在 R 上使用 JSON body 加密请求

POST encripted request with JSON body on R

我正在尝试使用 R 来 post 对 API 的加密请求。

特别是 /v3/orders/ 请求。

需要使用一个APIkeysecret,以及一个递增的nonce.

使用 openssljsonlitehttr 库:

body 必须 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.

构造的授权 header
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))

我之前能够 post 向这个 API 请求一个空的负载,但是这个调用发送了不支持的媒体类型错误,关于我的方式 JSON对有效载荷进行编码是造成这种情况的原因。

有 Ruby 和 PHP 示例说明如何提出此请求 here

由于我没有钥匙可以尝试,这是我曾经遇到过的一个案例的答案——你可能想稍微改变一下你的 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"}

如果有效请告诉我,

最佳,

科林

所以,我终于可以发送请求了。

感谢 Colin Fay 对如何消除括号的回应。

问题是,header 必须用未加括号的 JSON body 构造,但 body 必须作为带有自动 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())