Почему запрос заказа Oanda выдает сообщение об ошибке?

#python #api

#python #API

Вопрос:

Я пытаюсь отправить запрос заказа в Oanda, но получаю следующее сообщение об ошибке: {«ErrorMessage»: «Невозможно проанализировать тело JSON».}. Я работал над проблемой в течение недели, но решение не было найдено. Я проверил и перепроверил все требования API Oanda, и все кажется правильным. Похоже, что аутентификация проходит нормально, и когда я меняю метод POST, чтобы ПОЛУЧИТЬ и немного изменить код, я получаю всю историю сделок из своей учетной записи. Меня не интересует оболочка Python версии 20, и я бы предпочел кодировать все с нуля. Судя по сообщению, похоже, что я отправляю неправильный запрос заказа, и причиной может быть либо неправильное использование библиотеки запросов, либо проблема с параметрами. Любой ввод, как заставить код работать, будет высоко оценен. Спасибо.

 import requests

domain = 'api-fxpractice.oanda.com'
access_token = 'TOKEN'
account_id = 'ACCOUNT_ID'
Pair = "EUR_USD"

url = "https://"   domain   "/v3/accounts/"   account_id   "/orders"
headers = {"Authorization" : "Bearer "    access_token}
params = {
      "type": "MARKET",
      "instrument": "EUR_USD",                        
      "units": "100",
      "timeInForce": "FOK",
      "positionFill": "DEFAULT"
         }
RequestData = requests.post(url, headers = headers, params = params)
print(RequestData.text)`
  

Ответ №1:

Похоже, что API требует JSON в теле, поэтому для достижения этого импортируйте библиотеку json: import json

Для изменения запроса params = params на data = json.dumps(params) , который будет отправлять данные в теле сообщения как JSON. Полная строка запроса будет:

RequestData = requests.post(url, headers = headers, data = json.dumps(params))

Комментарии:

1. Спасибо, что ответили на мой вопрос. По-видимому, отправка данных в формате JSON не является проблемой. Новое сообщение с сервера после реализации вашего кода выглядит так: {«ErrorMessage»: «Неподдерживаемый ContentType: «}. Я перепробовал множество вариантов тела запроса, и еще одно сообщение, которое я получаю, также выглядит так: {«ErrorMessage»: «Неподдерживаемый ContentType: application /x-www-form-urlencoded»}

2. @WillyD Попробуйте headers = { 'Content-type': 'application/json' } для типа содержимого JSON и RequestData = requests.post(url, headers = headers, data = json.dumps(params), headers = headers) для отправки.

3. Отличная работа, спасибо вам за ваш ответ. После удаления дубликатов заголовков из строки запроса сервер подтвердил принятие заказа.

4. На данный момент при использовании API V20 требуется передача JSON в виде {"order": {"type": "MARKET", "instrument": "EUR_USD", "units": "-1000", "timeInForce": "FOK", "positionFill": "DEFAULT"}} вместо {"type": "MARKET", "instrument": "EUR_USD", "units": "-1000", "timeInForce": "FOK", "positionFill": "DEFAULT"}