【问题标题】:How to properly make POST request如何正确发出 POST 请求
【发布时间】:2017-02-07 20:23:41
【问题描述】:

我正在尝试向 API 发出我的第一个 POST 请求。出于某种原因,我总是得到状态 403 作为回报。我怀疑这是错误生成的签名。 api-key 和客户端 ID 肯定是正确的。

我的代码

nonce <-as.integer(Sys.time())

post_message <- paste0(nonce, data_client.id, data_key) # data_client.id = client id # data_key = key

sha.message <- toupper(digest::hmac(data_secret, object = post_message, algo = 'sha256', serialize = TRUE))

url <- 'https://www.bitstamp.net/api/v2/balance/'


body = list('API-KEY' = data_key, 'nonce' = nonce, 'signature' = sha.message)

httr::POST(url, body = body, verbose())

输出

<- HTTP/1.1 403 Authentication Failed

我正在尝试访问 Bitstamp API:https://www.bitstamp.net/api/?package=Rbitcoin&version=0.9.2

所有私有 API 调用都需要身份验证。对于一个成功的 您需要提供您的 API 密钥、签名和 随机数参数。

API 密钥

要获取 API 密钥,请依次转到“帐户”、“安全”和“API 访问”。 设置权限并点击“生成密钥”。

无名

once 是一个常规整数。它必须随着每 要求您提出。在此处阅读更多相关信息。示例:如果您设置随机数 在您的第一个请求中设置为 1,您必须在您的第一个请求中将其设置为至少 2 第二个请求。您不需要从 1 开始。一个常见的 实践是对该参数使用unix时间。

签名

签名是 HMAC-SHA256 编码的消息,包含随机数、客户 ID(可在此处找到)和 API 密钥。 HMAC-SHA256 代码必须是 使用您的 API 密钥生成的密钥生成。 此代码必须转换为它的十六进制表示(64 大写字符)。

【问题讨论】:

    标签: r http


    【解决方案1】:

    我不确定你的问题是否仍然存在,但根据你的代码,我设法让它工作。事实上,主要问题出在正文中,API 文档显示它需要“key”而不是“API-KEY”。 另外,serialize 应该是 FALSE 而不是 TRUE。

    目前可行(但 API 可能会更改):

    nonce <-as.integer(Sys.time())
    
    post_message <- paste0(nonce, data_client.id, data_key) # data_client.id = client id # data_key = key
    
    sha.message <- toupper(digest::hmac(data_secret, object = post_message, algo = 'sha256', serialize = FALSE))
    
    url <- 'https://www.bitstamp.net/api/v2/balance/'
    
    body = list('key' = data_key, 'nonce' = nonce, 'signature' = sha.message)
    
    httr::POST(url, body = body, verbose())
    

    【讨论】: