That is what we added, did you restart apache?
These are the steps we use to recreate the problem:
Step 1 : Configure and expose a test xmlrpc service in web2py:
a) Create a simple web2py application "testapp"
b) Edit db.py and add the following where "auth.settings" are
configured
auth.settings.allow_basic_login = True
c) Edit default.py and add @auth.requires_login() to call()
@auth.requires_login()
def call()
d) In default.py, add a function to be exposed as an xmlrpc service.
@service.xmlrpc
def multiply(a=1,b=1):
product = int(a) * int(b)
return dict(answer=product)
e) Create a user in the "testapp" web application, e.g.
"[email protected]", password = "oranges". This user will be used to
authenticate against the test service.
Step 2 : Invoke XMLRPC service from Python
Assume server is available on localhost:8000. The path to the XMLRPC
wrapper is "testapp/default/call/xmlrpc".
Open a python shell
>>> from xmlrpclib import ServerProxy
Create a server using format http://user:pass@host:port/path
>>> server =
>>> ServerProxy('http://[email protected]:oranges@localhost:8000/testapp/default/call/xmlrpc')
Make sure to use "https" or "http" as appropriate. To enable logging
of request/response data, create with the named parameter
"verbose=True", e.g.
>>> server =
>>> ServerProxy('http://[email protected]:oranges@localhost:8000/testapp/default/call/xmlrpc',
>>> verbose=True)
Invoke the multiply() method
>>> server.multiply(2, 2)
You should see a dictionary containing the answer or, if it's
incorrectly configured, a 303 SEE OTHER error.
Cheers,
Robin
On Jul 12, 5:52 pm, Abhishek Gupta <[email protected]>
wrote:
> Hello,
>
> I am still getting the same error. My /etc/apache2/mods-enabled/
> wsgi.conf looks like this :
>
> <IfModule mod_wsgi.c>
> WSGIPassAuthorization On
> </IfModule>
>
> On 12 July 2011 01:15, Robin Marshall <[email protected]> wrote:
>
>
>
>
>
>
>
>
>
> > I found the problem, it's to do with WSGI - it needs to be configured
> > to pass on the authentication data.
>
> > In the configuration file for the module, somewhere like /etc/apache2/
> > mods-enabled/wsgi.conf you need to add a line:
>
> > WSGIPassAuthorization On
>
> > and reload apache.
>
> > Cheers,
> > Robin
>
> > On Jun 14, 6:30 am, Abhishek Gupta <[email protected]>
> > wrote:
> > > I have the following functions defined in test.py file
>
> > > @auth.requires_login()
> > > def call():
> > > return service()
>
> > > @service.xmlrpc
> > > def time():
> > > import time
> > > return time.ctime()
>
> > > and following in my db.py file
> > > auth.settings.allow_basic_
> > > login = True #for CLI access
>
> > > When I execute the following commands in python shell :
>
> > > server = ServerProxy( '
> > > https://username:[email protected]/cloud_computing/test/call/xmlrpc'
> > )
> > > server.time()
>
> > > I get the following error
>
> > > Traceback (most recent call last):
> > > File "<stdin>", line 1, in <module>
> > > File "/usr/lib/python2.6/xmlrpclib.py", line 1199, in __call__
> > > return self.__send(self.__name, args)
> > > File "/usr/lib/python2.6/xmlrpclib.py", line 1489, in __request
> > > verbose=self.__verbose
> > > File "/usr/lib/python2.6/xmlrpclib.py", line 1243, in request
> > > headers
> > > xmlrpclib.ProtocolError: <ProtocolError for
> > > username:[email protected]/cloud_computing/test/call/xmlrpc: *303
> > SEE
> > > OTHER*>
>
> > > Am, I doing something wrong somewhere?
>
> > > --
> > > Abhishekhttp://abhishekgupta92.info
>
> --
> Abhishek
> Webpage <http://abhishekgupta92.info/> !!! Blog<http://thelazy.info/abhishek>