我在R中的DELETE请求中遇到了问题,我已经成功地使用下面的代码生成了GET和POST请求。如有任何帮助或指示,将不胜感激。
它需要从GDAX到api.key的secret和passphrase才能工作。
这是我的功能:
library(RCurl)
library(jsonlite)
library(httr)
library(digest)
cancel_order <- function(api.key,
secret,
passphrase) {
api.url <- "https://api.gdax.com"
#get url extension----
req.url <- "/orders/"
#define method----
method = "DELETE"
url <- paste0(api.url, req.url)
timestamp <-
format(as.numeric(Sys.time()), digits = 13) # create nonce
key <- base64Decode(secret, mode = "raw") # encode api secret
#create final end point----
what <- paste0(timestamp, method, req.url)
#create encoded signature----
sign <-
base64Encode(hmac(key, what, algo = "sha256", raw = TRUE)) # hash
#define headers----
httpheader <- list(
'CB-ACCESS-KEY' = api.key,
'CB-ACCESS-SIGN' = sign,
'CB-ACCESS-TIMESTAMP' = timestamp,
'CB-ACCESS-PASSPHRASE' = passphrase,
'Content-Type' = 'application/json'
)
##------------------------------------------------
response <- getURL(
url = url,
curl = getCurlHandle(useragent = "R"),
httpheader = httpheader
)
print(rawToChar(response)) #rawToChar only on macOS and not on Win
}我得到的错误是"{\"message\":\"invalid signature\"}",尽管相同的命令将对GET & POST进行编码和签名。
参考文献: GDAX API文档
发布于 2017-12-29 19:32:46
好的。我接受了@mrflick的建议,并根据他对请求宾的反馈,指出了我与不同但相关的问题的联系。
经过仔细检查后,我意识到,出于某种原因,我的请求被视为POST请求,而不是DELETE请求。因此,我决定将getURL函数替换为RCurl中的另一个更高级别的函数,这样它才能工作。
response <- httpDELETE(
url = url,
curl = getCurlHandle(useragent = "R"),
httpheader = httpheader
)其他一切都保持不变。很显然签名从来没有问题。
我现在已经将这个函数添加到我的非官方包装器rgdax中了。
编辑::
非官方的包装现在是正式的,在CRAN上。
发布于 2017-12-28 19:54:19
只是猜测一下,因为我对API不熟悉,但也许您错过了“order-id”.
https://stackoverflow.com/questions/48011953
复制相似问题