XML RPC changes between 3.7 and 3.9 yield 401 http error
lucas
lucas at bourneuf.net
Sat Mar 27 14:04:15 EDT 2021
And, in my outputs, a key part is missing: the received arguments as
parsed by Flask:
Python 3.7:
REQUEST: ImmutableMultiDict([('u', 'user'), ('p', 'password')])
Python 3.9:
REQUEST: ImmutableMultiDict([])
Have a good day everyone,
--lucas
On 27/03/2021 18:53, lucas wrote:
> Following our previous discussion:
> https://www.talkend.net/post/287193.html
>
> I finally took time (thanks to Florian R.) to get a reproducible example
> of my problem, as asked previously by ChrisA.
>
> The following code is implementing a webserver with Flask, and a client
> with the XMLRPC client:
>
> import sys
> from xmlrpc import server, client
> from urllib.parse import urlencode
> from flask import Flask, request
>
>
> PORT = 23456
> USER, PASSWD = 'user', 'password'
> URL = '127.0.0.1:' + str(PORT)
>
> if len(sys.argv) > 1 and sys.argv[1] == 'server':
> app = Flask(__name__)
> @app.route('/', methods=['POST'])
> @app.route('/RPC2', methods=['POST'])
> def login():
> print('REQUEST:', request.args)
> return 'ok'
> app.run(debug=True, host='localhost', port=PORT)
>
> else:
> url = 'http://' + URL + '?' + urlencode({'u': USER, 'p': PASSWD})
> print(url)
> proxy = client.ServerProxy(url)
> print(proxy, dir(proxy))
> print(proxy.add(2, 3))
>
>
> You can run the client with `python3 p.py`, and the server with `python3
> p.py server`.
>
> On debian, Python 3.7, i got:
>
> lucas at debianserver:~$ python3.7 p.py server
> * Serving Flask app "p" (lazy loading)
> * Environment: production
> WARNING: This is a development server. Do not use it in a
> production deployment.
> Use a production WSGI server instead.
> * Debug mode: on
> * Running on http://localhost:23456/ (Press CTRL+C to quit)
> * Restarting with stat
> * Debugger is active!
> * Debugger PIN: 249-992-288
> 127.0.0.1 - - [27/Mar/2021 18:31:13] "POST /?u=user&p=password
> HTTP/1.1" 404 -
>
>
> On Arch, python 3.9, i got:
>
> aluriak at arch❯ python3.9 p.py server
> * Serving Flask app "p" (lazy loading)
> * Environment: production
> WARNING: This is a development server. Do not use it in a
> production deployment.
> Use a production WSGI server instead.
> * Debug mode: on
> * Running on http://localhost:23456/ (Press CTRL+C to quit)
> * Restarting with stat
> * Debugger is active!
> * Debugger PIN: 821-276-100
> 127.0.0.1 - - [27/Mar/2021 18:35:45] "POST /RPC2 HTTP/1.1" 200 -
>
>
> Both systems return the same output on command `pip3 freeze | grep
> Flask`, which is `Flask==1.1.2`.
>
>
> Note that the two outputs differs in two ways:
>
> 127.0.0.1 - - [27/Mar/2021 18:31:13] "POST /?u=user&p=password
> HTTP/1.1" 404 -
> 127.0.0.1 - - [27/Mar/2021 18:35:45] "POST /RPC2 HTTP/1.1" 200 -
>
> The first contains the arguments, and the second contains the path.
> Sounds like there is something wrong with both modules.
>
> This should be a reproducible example ; plus i'm not the only one to
> encounter that problem:
>
> https://github.com/kynan/dokuwikixmlrpc/issues/8#issuecomment-808755244
>
> Best regards,
> --lucas
More information about the Python-list
mailing list