сбой после https c ++ - PullRequest
       10

сбой после https c ++

0 голосов
/ 06 ноября 2018

Я пытаюсь получить доступ к https://api.binance.com/wapi/v3/withdraw.html Конечной точке Binance API

Мне нужно отправить его как почтовый заказ с моим ключом API в заголовке и параметрами в теле запроса.

Мой код написан на c ++, и я использую libcurl.

Функция hmac_sha256 () также работает.

У меня есть этот код:

bool BinanceAPI::make_Withdrawal(string api_key , string secret_key ,string asset , string address , double amount , string &id ){

    cout << "BINANCE: MAKE WITHDRAWAL"<<endl;

    ArbUtils au;
    Json::Value result;
    CURL * hand;

    bool ret = false;

    hand = curl_easy_init();

    string url = "https://api.binance.com/wapi/v3/withdraw.html";

    string post_data("asset=");
    post_data.append( asset);

    post_data.append("&address=");
    post_data.append(address);

    post_data.append( "&amount" );
    post_data.append( to_string(amount) );

    post_data.append( "&timestamp=" );
    post_data.append( to_string(au.get_msTime() ) );

    string signature = hmac_sha256( secret_key.c_str() , post_data.c_str());

    post_data.append( "&signature=" );
    post_data.append( signature );

    vector<string>extra_http_header;
    string header_chunk("X-MBX-APIKEY: ");
    header_chunk.append( api_key );
    extra_http_header.push_back( header_chunk );

    string str_result;

    curl_easy_setopt(hand , CURLOPT_URL , url.c_str() );
    curl_easy_setopt(hand , CURLOPT_WRITEFUNCTION , BinanceAPI::callback);
    curl_easy_setopt(hand , CURLOPT_WRITEDATA , &str_result );
    curl_easy_setopt(hand , CURLOPT_SSL_VERIFYPEER , false);
    curl_easy_setopt(hand , CURLOPT_ACCEPT_ENCODING , "gzip" );
    curl_easy_setopt(hand , CURLOPT_POST , 1);

    struct curl_slist *chunk = NULL;
    for(int i= 0 ; i < extra_http_header.size() ; i++){

        chunk = curl_slist_append(chunk , extra_http_header[i].c_str() );
    }
    curl_easy_setopt(hand , CURLOPT_HTTPHEADER , chunk);
    curl_easy_setopt(hand , CURLOPT_POSTFIELDS , post_data.c_str() );

    CURLcode res;

    res = curl_easy_perform(hand);

    curl_easy_cleanup(hand);
}

Хорошо, теперь я получаю сообщение об ошибке с сервера:

код: -1105 msg: "параметр 'полезная нагрузка' был пуст"

Я пытался и попросил поддержки, но они также не знают ответа. Я не знаю, почему это так. У меня есть другие конечные точки, к которым имеет доступ та же структура, которым также нужна та же самая форма, и они работают.

Есть идеи, почему это может происходить?

1 Ответ

0 голосов
/ 16 июня 2019

Я столкнулся с той же проблемой уже несколько дней. Просто починил. Мой код в Python Tho. Надеюсь, что вы можете сослаться на это.

import time, hmac, hashlib, urllib, json, requests

key = "my key"
secret_key = "my sk"
asset = "BTC"
addr = "abcdef" #btc address
amount = 1
timestamp = int(time.time() * 1000) #timestamp in ms

#the request parameters
request_body = {"asset": asset, "address": addr, \
                "amount": amount, "timestamp": timestamp}

#sign the request parameters with the secret key
#urllib.parse.urlencode(request_body) convert request body to a query string format

signature = hmac.new(bytes(secret_key, "utf-8"), \
                     bytes(urllib.parse.urlencode(request_body), "utf-8"), \
                     hashlib.sha256).digest().hex()

#add the signature to the request parameters
request_body["signature"] = signature

header = {"X-MBX-APIKEY": key, \
          "Content-Type": "application/x-www-form-urlencoded"}

#append the query string to the url
url = "https://api.binance.com/wapi/v3/withdraw.html?" +\
       urllib.parse.urlencode(request_body)

response = requests.post(url, headers=header) #send post request
print(response.json())

Проблема из-за плохой документации. Конечной точке требуется запрос post, но она завершается неудачно, если тело запроса отправляется отдельно, и работает, если отправляется строка запроса. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...