XML RPC changes between 3.7 and 3.9 yield 401 http error
lucas
lucas at bourneuf.net
Sat Mar 27 13:53:15 EDT 2021
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