#javascript #google-apps-script
Вопрос:
я продолжаю получать эту ошибку «Исключение: запрос не выполнен для https://ftx.com возвращенный код 401. Усеченный ответ сервера: {«успех»: false, «ошибка»: «Не вошел в систему»} (используйте опцию muteHttpExceptions для проверки полного ответа) »
Что не так с моим кодом?
var host = 'https://ftx.com';
var endpoint ='/api/wallet/all_balances';
var url = host endpoint;
var timestamp = '' new Date().getTime();
var payload = timestamp 'GET' endpoint '';
var shaObj = new jsSHA("SHA-256", "BYTES");
shaObj.setHMACKey(api_secret, "BYTES");
shaObj.update(payload);
var signature = shaObj.getHMAC("HEX");
var options = {
method: 'get',
headers: {
'FTX-KEY': api_key,
'FTX-TS': timestamp,
'FTX-SIGN': signature
},
muteHTTPExceptions: 'true'
}
var jsondata = UrlFetchApp.fetch(url, options);
var data = JSON.parse(jsondata.getContentText());
Комментарии:
1. Я никогда не знал API, который вы хотите использовать. Это связано с моим плохим навыком. Я глубоко извиняюсь за это. Итак, чтобы правильно понять вашу текущую проблему, можете ли вы предоставить официальный документ API, который вы хотите использовать?
2. Вот официальный Api docs.ftx.com/#overview
3. Спасибо, что ответили. Из вашего ответа я предложил ответ. Не могли бы вы подтвердить это? В своем тесте я подтвердил, что запрос скрипта python официального документа совпадает с запросом преобразованного скрипта Google Apps. Итак, если возникает ошибка, пожалуйста, проверьте свой
api_key
иsecret
еще раз.
Ответ №1:
Я считаю, что ваша цель заключается в следующем.
- Вы хотите запросить получение остатков на всех счетах FTX API с помощью Google Apps Script.
- Пример скрипта python для извлечения заголовка запроса выглядит следующим образом.
import time import hmac from requests import Request ts = int(time.time() * 1000) request = Request('GET', '<api_endpoint>') prepared = request.prepare() signature_payload = f'{ts}{prepared.method}{prepared.path_url}'.encode() signature = hmac.new('YOUR_API_SECRET'.encode(), signature_payload, 'sha256').hexdigest() request.headers['FTX-KEY'] = 'YOUR_API_KEY' request.headers['FTX-SIGN'] = signature request.headers['FTX-TS'] = str(ts)
В этом случае, когда ваш скрипт модифицируется, как насчет следующей модификации?
Модифицированный скрипт:
К сожалению, new jsSHA()
не может использоваться напрямую. В скрипте Google Apps есть класс Utilities . Вы можете использовать метод «computeHmacSha256Signature» этого класса. И я думаю, что muteHTTPExceptions: 'true'
это muteHttpExceptions: true
так.
function myFunction() {
var api_key = "YOUR_API_KEY"; // Please set your API key.
var secret = "YOUR_API_SECRET"; // Please set your secret value.
var host = 'https://ftx.com';
var endpoint = '/api/wallet/all_balances';
var url = host endpoint;
var timestamp = '' new Date().getTime();
var payload = timestamp 'GET' endpoint '';
var signature = Utilities.computeHmacSha256Signature(payload, secret).map(byte => ('0' (byte amp; 0xFF).toString(16)).slice(-2)).join('');
var options = {
method: 'get',
headers: {
'FTX-KEY': api_key,
'FTX-TS': timestamp,
'FTX-SIGN': signature
},
muteHttpExceptions: true
}
var res = UrlFetchApp.fetch(url, options);
console.log(res.getContentText())
}
Ссылки:
Комментарии:
1. Ваш код работает отлично. Большое спасибо.
2. @Die Moba Спасибо за ответ. Я рад, что ваша проблема была решена. Я мог бы понять ваш вопрос по предоставленному вами официальному документу. И вам спасибо.