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

я формирую тело запроса следующим образом:

price = self.get_price()
body = {
    "currency_pair": pair,
    "type": "limit",
    "account": "spot",
    "side": side,
    "iceberg": "0",
    "amount": f"{quantity}",
    "price": str(price),
    "time_in_force": "gtc",
    "auto_borrow": False
}

строка в консоли выглядит так:

{"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 = {
    "currency_pair": pair,
    "type": "limit",
    "account": "spot",
    "side": side,
    "iceberg": "0",
    "amount": f"{quantity}",
    "price": str(price),
    "time_in_force": "gtc",
    "auto_borrow": False
}

строка выглядит идентично предыдущий:

{"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()

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

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

буду благодарен за любую подсказку/решение :)


Ответы (0 шт):