POST 在 R 上使用 JSON body 加密请求
POST encripted request with JSON body on R
我正在尝试使用 R 来 post 对 API 的加密请求。
特别是 /v3/orders/ 请求。
需要使用一个APIkey
和secret
,以及一个递增的nonce
.
使用 openssl
、jsonlite
和 httr
库:
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())
我正在尝试使用 R 来 post 对 API 的加密请求。
特别是 /v3/orders/ 请求。
需要使用一个APIkey
和secret
,以及一个递增的nonce
.
使用 openssl
、jsonlite
和 httr
库:
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
.
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())