XML RPC changes between 3.7 and 3.9 yield 401 http error

lucas lucas at bourneuf.net
Wed Feb 24 12:35:30 EST 2021


On 24/02/2021 18:00, Chris Angelico wrote:
> On Thu, Feb 25, 2021 at 2:02 AM lucas <lucas at bourneuf.net> wrote:
>>
>> Hi everyone,
>>
>> (Sorry for the double-send if any, i'm not sure the first send was
>> performed, maybe because of bounce errors according to mailman.)
>>
>>
>> I'm currently trying to understand an error when using the
>> dokuwikixmlrpc python module, allowing to easily work with DokuWiki RPC
>> interface.
>>
>> Another description of the problem :
>>          https://github.com/kynan/dokuwikixmlrpc/issues/8
>>
>> Here is the code, tailored to work with the DokuWiki RPC interface:
>>
>>       from urllib.parse import urlencode
>>       import xmlrpc.client as xmlrpclib
>>
>>       URL = 'wiki.example.net'
>>       USER = 'user'
>>       PASSWD = 'password'
>>       USER_AGENT = 'DokuWikiXMLRPC  1.0  for testing'
>>
>>       script = '/lib/exe/xmlrpc.php'
>>       url = URL + script + '?' + urlencode({'u': USER, 'p': PASSWD})
>>       xmlrpclib.Transport.user_agent = USER_AGENT
>>       xmlrpclib.SafeTransport.user_agent = USER_AGENT
>>       proxy = xmlrpclib.ServerProxy(url)
>>
>>       v = proxy.dokuwiki.getVersion()
>>       print(v)
>>
>> When ran with Python 3.7 (a personnal debian server, or a personal
>> windows computer), i obtain the expected 'Release 2018-04-22a "Greebo"'
>> as ouput.
>> When ran with Python 3.9 (my personnal, manjaro machine), i obtain the
>> following stacktrace:
>>
>>       Traceback (most recent call last):
>>         File "/home/project/read.py", line 32, in <module>
>>           v = proxy.dokuwiki.getVersion()
>>         File "/usr/lib/python3.9/xmlrpc/client.py", line 1116, in __call__
>>           return self.__send(self.__name, args)
>>         File "/usr/lib/python3.9/xmlrpc/client.py", line 1456, in __request
>>           response = self.__transport.request(
>>         File "/usr/lib/python3.9/xmlrpc/client.py", line 1160, in request
>>           return self.single_request(host, handler, request_body, verbose)
>>         File "/usr/lib/python3.9/xmlrpc/client.py", line 1190, in
>> single_request
>>           raise ProtocolError(
>>       xmlrpc.client.ProtocolError: <ProtocolError for
>> wiki.example.net/lib/exe/xmlrpc.php: 401 Unauthorized>
>>
> 
> A properly-formed URL will start with a protocol. I don't know
> specifically what changed, but it's looking like something started
> rejecting malformed URLs. Try adding "http://" or "https://" to your
> URL (whichever is appropriate) and see if both versions will accept
> it.
> 
> ChrisA
> 

I did that, obtaining the following URL

https://wiki.[…]/lib/exe/xmlrpc.php?u=[…]&p=[…]

on my two currently available computer (laptop on 3.9, remote on 3.7), 
and the results is the same.

For information, i'm uploading the same python program to my remote 
server (debian, 3.7), and running it with the same parameters as my 
laptop (manjaro, 3.9). My laptop is getting the 401, my server is 
getting the expected dokuwiki version.

--lucas


More information about the Python-list mailing list