This question has been flagged
1 Reply
6507 Views

Internal Server Error

{"message": "Odoo Server Error", "code": 200, "data": {"debug": "Traceback (most recent call last):\n File \"/opt/odoo/odoo-server/addons/web/controllers/main.py\", line 70, in wrap\n return f(*args, **kwargs)\n File \"/opt/odoo/odoo-server/addons/web_pdf_preview/controllers/__init__.py\", line 41, in index\n result.headers['Content-Disposition'] = result.headers['Content-Disposition'].replace('attachment', 'inline')\n File \"/usr/lib/python2.7/dist-packages/werkzeug/datastructures.py\", line 891, in __getitem__\n raise exceptions.BadRequestKeyError(key)\nBadRequestKeyError: 400: Bad Request\n", "message": "Content-Disposition", "name": "werkzeug.exceptions.BadRequestKeyError", "arguments": ["Content-Disposition"]}}

Help me please

Avatar
Discard
Best Answer

Your odoo server is responding with an error because it is not sure what database to respond from. You likely have more than one database.

An Odoo server is capable of hosting multiple databases simultaneously. When you make a request to an Odoo server one of if not the very first things it does is determine which instance or database the request should be handled by as each database could have different modules installed and different users / data and hence the same request to each database would very likely be handled differently and yield different results.

There are multiple ways of telling the server what database should be targeted for each request. Some of these are contextual and I do not know if a document is available to truly explain when one is relevant and another is not.

Here they are.

  1. db_filter: A regular expression contained in the startup script or the server configuration file. Ex. db_filter = %d (--db_filter %d in startup script) in this example http://test.com the database would be called test
  2. Query Stringhttp://test.com?db=test, certain handlers in Odoo will use this query string to determine what database to use for a request.
  3. Session Id: Clients (mostly web browsers) will store a cookie containing the session id and pass it to the server with each request "session_id=95bbc53e2ac4d02f50a8d6bf678602112a072807"

Bottom line the error you are getting is that your server is saying it cant possibly determine what database to respond to your request with. If you need a session id to pass to the server with the request you can use jsonrpc to authenticate. Store the session id and pass it in the headers of subsequent requests.


url = 'http://localhost:8069/web/session/authenticate'
data = {
        'jsonrpc':'2.0',
        'method':'call',
        'params':{
                  'context':{},
                  'db':'db_name',
                  'login':'admin',
                  'password':'admin'
                 },
        'id': null
       }

res = requests.post(url, data=data, headers={"Content-Type":"application/json"})

print(res.text)

# YOU WILL HAVE TO PARSE THE RESULT YOURSELF I AM NOT SURE THE RESPONSE OBJECT WILL BE AS BELOW
session_id = res.text['results']['session_id']

Now use the session_id in your requests.

res = requests.post('http://localhost:8069/test_json', headers={"Content-Type":"application/json"}, cookies={'session_id': session_id})
Avatar
Discard