@GineTik

Отправка запроса с одинаковым телом дают разные результаты, как исправить?

я формирую тело запроса следующим образом:
price = self.get_price()
body = '{' + f'"currency_pair":"{pair}","type":"limit","account":"spot","side":"{side}","amount":"{quantity}","price":"{price}","time_in_force":"gtc"' + '}'


строка в консоли выглядит так:
{"currency_pair":"BNB_USDT","type":"limit","account":"spot","side":"buy","amount":"0.019",
"price":"516.2708","time_in_force":"gtc"}


запрос с таким телом возвращает следующий ответ: 
{'status': 405, 'label': 'METHOD_NOT_ALLOWED', 'message': ''}


если немного изменить присваивание цены: 
price = 516.2708 # self.get_price()
body = '{' + f'"currency_pair":"{pair}","type":"limit","account":"spot","side":"{side}","amount":"{quantity}","price":"{price}","time_in_force":"gtc"' + '}'


строка выглядит идентично предыдущий:
{"currency_pair":"BNB_USDT","type":"limit","account":"spot","side":"buy","amount":"0.019",
"price":"516.2708","time_in_force":"gtc"}


ответ:
{'id': '109317501746', 'text': 'apiv4', 'create_time': '1641032772', 'update_time': '1641032772', 'create_time_ms': 1641032772621,  ... }


функция get_price() берет строку цены из сайта, преобразует в float и возвращает значение
host = "https://api.gateio.ws"
    prefix = "/api/v4"
    headers = {'Accept': 'application/json', 'Content-Type': 'application/json'}
    url = ''

    def get_url(self, param=None, host=None):
        if host is None:
            host = self.host

        if param is None:
            return host + self.prefix + self.url
        return host + self.prefix + self.url + "?" + param

    def get_price(self) -> float:
        return float(self.get_price_by_str())

    def get_price_by_str(self):
        self.url = '/spot/order_book'
        query_param = f'currency_pair={self.pair}'
        r = self.send_request(query_param)
        print(r)
        return r["bids"][0][0]

    def send_request(self, param: str = None, body: dict = None, method='GET', authorization=False):
        headers = self.headers
        data = None
        if body is not None:
            data = json.dumps(body)

        if authorization is True:
            headers.update(self.gen_sign(method, param, data))

        r = requests.request(method, self.get_url(param), headers=headers, data=data)
        return r.json()


проблема в том, что я должен динамически получать цену и не могу присвоить статическое значение в переменную

если что-то не понятно буду рад дописать больше информации

буду благодарен за любую подсказку/решение :)
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 1
@alekssamos
Программист любитель
import json
body = json.dumps({"currency_pair":pair, "type":"limit", "account": "spot", "side": side, "amount":quantity, "price":price, "time_in_force": "gtc"})


Разница есть. Сравните:
>>> type("2.46");  type(2.46)
<class 'str'>
<class 'float'>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы