Нужно отправить запрос Python API с помощью cURL - PullRequest
0 голосов
/ 27 мая 2019

Я хочу отправить запрос POST с помощью Python в API OANDA, чтобы открыть заказ. Они не имеют оболочки Python и используют cURL, поэтому мне пришлось попробовать конвертировать из cURL в Python. Я сделал это, используя https://curl.trillworks.com/ - но преобразование следующего не работает.

Вы можете просмотреть документацию по API OANDA здесь, на первой вкладке Green POST - http://developer.oanda.com/rest-live-v20/order-ep/

Вот с чем я работаю. Этот первый блок определяет детали заказа. В этом случае рыночный ордер в инструменте EUR_USD с количеством 100 единиц и временем в силе, равным «заполнить или убить»:

body=$(cat << EOF
{
  "order": {
    "units": "100",
    "instrument": "EUR_USD",
    "timeInForce": "FOK",
    "type": "MARKET",
    "positionFill": "DEFAULT"
  }
}
EOF
)
curl \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SECRET TOKEN" \
  -d "$body" \
  "https://api-fxpractice.oanda.com/v3/accounts/{ACCOUNT-NUMBER}/orders"

Преобразовано в Python:

import requests

headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer SECRET TOKEN',
}

data = '$body'

response = requests.post('https://api-fxpractice.oanda.com/v3/accounts/{ACCOUNT-NUMBER}/orders', headers=headers, data=data)

Как видите, я считаю, что где-то в части "body = $" есть ошибка форматирования, но я не совсем уверен. Я просто получаю ошибку 400, «недопустимые значения».

1 Ответ

1 голос
/ 27 мая 2019

Если вы отправляете данные в формате JSON, вы должны передать их в аргумент json вместо data ( объяснение , метод ).

import requests

headers = {
    # 'Content-Type': 'application/json', # will be set automatically
    'Authorization': 'Bearer SECRET TOKEN',
}

body = {
  "order": {
    "units": "100",
    "instrument": "EUR_USD",
    "timeInForce": "FOK",
    "type": "MARKET",
    "positionFill": "DEFAULT"
  }
}

response = requests.post('https://api-fxpractice.oanda.com/v3/accounts/{ACCOUNT-NUMBER}/orders', 
                         headers=headers, json=body)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...