nginx не передает тип mime «json» вызову Odoo RPC по URL-адресу «jsonrpc»

У меня есть скрипт Python, который может войти в Odoo, используя вызовы RPC для URL-адреса jsonrpc. Скрипты работают, если я запускаю их на сервере Odoo и указываю прямо на Odoo.

login_parms = {
"id": conversation_id,
"jsonrpc": "2.0",
"method": "call",
"params": {
    "args": [database, username, password],
    "method": "login", "service": "common"}}


response = requests.get(
    url,
    json=login_parms,
    headers={'Content-Type': 'application/json', }) 

Однако, когда я пытаюсь запустить скрипт удаленно, я получаю 400:

Функция объявлена ​​как способная обрабатывать запрос типа «json», но вызывается с запросом типа «http».

Я использую nginx в качестве прокси-сервера, и я думаю, что он неправильно отправляет «json» в качестве типа mime. Я попытался добавить следующий блок местоположения в свой серверный блок:

location /jsonrpc {
    proxy_pass http://127.0.0.1:8069/jsonrpc;
    proxy_redirect off;
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 300M;
    default_type application/json;
}

Но я получаю ту же ошибку 400.


person Pengo    schedule 05.04.2018    source источник


Ответы (1)


Я отправлял свои вызовы RPC на http, который перенаправлял на https. Перенаправление не проходило по типу mime json. Когда я начал отправлять вызовы RPC напрямую на https, Odoo получил json и ответил, как и ожидалось.

Для справки, вот код блока местоположения:

    location /jsonrpc {
    proxy_pass http://127.0.0.1:8069;
    proxy_redirect off;
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Content-Type application/json;
    client_max_body_size 300M;
}   
person Pengo    schedule 18.04.2018