Hi Cao, Inside "_sort_request" function mentioned at the wiki, change the below line
self.params.append(key + '=' + urllib.quote_plus(args[key])) to self.params.append( key + '=' + str.lower(urllib.quote_plus(args[key])). *replace(**"+", "%20") *) The time stamp parameter "2015-08-28 16:20:00" , you are passing has a space in it, which gets replaced with "+" through quote_plus logic, so replace that "+" with "%20", this is getting passed in calculating signature in later function. Similarly, change it for "_build_post_request" function. Let us know. Regards, Santhosh On Fri, Aug 28, 2015 at 6:40 PM, <tony_caot...@163.com> wrote: > > > My scripts is just from cloudstack website > > https://cwiki.apache.org/confluence/display/CLOUDSTACK/Simple+class+for+making+API+calls%2C+Python > > and I just do some testing like this: > > 1. >>> from SignedAPICall import api > 2. >>> api.listEvents(listall='true', startdate='2015-08-28') > 3. >>> api.listEvents(listall='true', startdate='2015-08-28 16:20:00') > > Line 2 works fine, line 3 failed with error " 'http error', 401, > 'Unauthorized' ". > > I also do some other tests, they also works fine, like api.listHosts() > api.listVirtualMachines(). > > when line 3 failed, management-server.log said this: > > 2015-08-28 16:37:53,619 DEBUG [c.c.a.ApiServlet] > (catalina-exec-15:ctx-4e587804) ===START=== 10.0.1.99 -- GET > apiKey=hjZ12EQ4JfFasIHO3RCXBLji-3RbBmdC973utGwCL5388WypVKwtaNsDso-JzVQIZXUVwfaT1vANdDUJs3Vkkg&command=listEvents&listall=true&response=json&startdate=2015-08-28+16%3A20%3A00&signature=r7wa861jYWP4QbNMeEjZZ2wNpIc%3D > 2015-08-28 16:37:53,622 INFO [c.c.a.ApiServer] > (catalina-exec-15:ctx-4e587804 ctx-1f6fddbe) User signature: > r7wa861jYWP4QbNMeEjZZ2wNpIc= is not equaled to computed signature: > 4c8Kmn+cbMZAmfSvSISPkWt9WCQ= > 2015-08-28 16:37:53,622 DEBUG [c.c.a.ApiServlet] > (catalina-exec-15:ctx-4e587804 ctx-1f6fddbe) ===END=== 10.0.1.99 -- GET > apiKey=hjZ12EQ4JfFasIHO3RCXBLji-3RbBmdC973utGwCL5388WypVKwtaNsDso-JzVQIZXUVwfaT1vANdDUJs3Vkkg&command=listEvents&listall=true&response=json&startdate=2015-08-28+16%3A20%3A00&signature=r7wa861jYWP4QbNMeEjZZ2wNpIc%3D > > following for line 2: > 2015-08-28 16:37:15,900 DEBUG [c.c.a.ApiServlet] > (catalina-exec-13:ctx-f8019189) ===START=== 10.0.1.99 -- GET > apiKey=hjZ12EQ4JfFasIHO3RCXBLji-3RbBmdC973utGwCL5388WypVKwtaNsDso-JzVQIZXUVwfaT1vANdDUJs3Vkkg&command=listEvents&listall=true&response=json&startdate=2015-08-28&signature=KZZIAOaRduzCJlo0byaN9j4uvro%3D > 2015-08-28 16:37:15,939 DEBUG [c.c.a.ApiServlet] > (catalina-exec-13:ctx-f8019189 ctx-c42b8c5e ctx-1ebbe226) ===END=== > 10.0.1.99 -- GET > apiKey=hjZ12EQ4JfFasIHO3RCXBLji-3RbBmdC973utGwCL5388WypVKwtaNsDso-JzVQIZXUVwfaT1vANdDUJs3Vkkg&command=listEvents&listall=true&response=json&startdate=2015-08-28&signature=KZZIAOaRduzCJlo0byaN9j4uvro%3D > > > > ----------- > Cao Tong > > > On 08/28/2015 02:09 PM, Abhinandan Prateek wrote: > >> apikey/signature should work and they have same privileges as the >> respective user logged in. >> Are all the api calls failing or just some ? >> Can you share relevant portion of the scripts that you are trying to run ? >> >> On 28-Aug-2015, at 11:31 am, tony_caot...@163.com wrote: >>> >>> >>> Thanks for all your people's replys. >>> >>> 1. Abhinandan, My ACS manager was not listening on port '8096', >>> >>> 2. As Yipeng said, When I call this api from cloudmonkey, it works >>> fine, like this >>> " cloudmonkey api listEvents listall=true startdate='2015-08-28 >>> 00:00:00' " >>> >>> When I call it through my python scripts, I used the >>> apikey/signature pair to work, but it failed. >>> I found that how cloudmonkey works, >>> first it login with username/password, then call the function with >>> this session id. >>> >>> it seems that the apikey/signature pair's privilege is not same with >>> username/password pair's ? >>> >>> >>> @Daan, yes I am a Chinese. I am afraid it's not a preblem about >>> character encodings perhaps. >>> >>> >>> ----------- >>> Cao Tong >>> >>> On 08/27/2015 08:54 PM, Abhinandan Prateek wrote: >>> >>>> Try using the “8096” port for testing/checking APIs. >>>> >>>> shapeblue.com> wrote: >>>> >>>>> Yes, as per >>>>> https://cloudstack.apache.org/api/apidocs-4.2/root_admin/listEvents.html >>>>> >>>>> >>>>> On 24-Aug-2015, at 2:08 pm, tony_caot...@163.com wrote: >>>>>> >>>>>> Hello Every. >>>>>> >>>>>> I know this is a very simple question to most of you. but it is >>>>>> really hard for me to continue my work. >>>>>> >>>>>> So could Anyone spend your three minutes to give me some advice, it >>>>>> will be very usefull to me. >>>>>> >>>>>> my question is: >>>>>> >>>>>> How does the parameter startdate/enddate of api listEvents() use >>>>>> new time format like 'yyyy-MM-dd HH:mm:ss' ? >>>>>> >>>>>> >>>>>> Event({'listall':'True', 'startdate':'2015-08-24 00:00:00'}) >>>>>>>>> >>>>>>>> >>>>>> http://10.0.1.100:8080/client/api?apiKey=hjZ12EQ4JfFasIHO3RCXBLji-3RbBmdC973utGwCL5388WypVKwtaNsDso-JzVQIZXUVwfaT1vANdDUJs3Vkkg&command=listEvents&listall=True&response=json&startdate=2015-08-24+00%3A00%3A00&signature=z4LQCw7yzGmTK5B7TzAbzl1biXI%3D >>>>>> Traceback (most recent call last): >>>>>> File "<stdin>", line 1, in <module> >>>>>> File "SignedAPICall.py", line 67, in Event >>>>>> a = api.listEvents(request) >>>>>> File "SignedAPICall.py", line 49, in handlerFunction >>>>>> return self._make_request(name, args[0]) >>>>>> File "SignedAPICall.py", line 61, in _make_request >>>>>> data = self._http_get(self.value) >>>>>> File "SignedAPICall.py", line 54, in _http_get >>>>>> response = urllib.urlopen(url) >>>>>> File "/usr/lib64/python2.7/urllib.py", line 87, in urlopen >>>>>> return opener.open(url) >>>>>> File "/usr/lib64/python2.7/urllib.py", line 208, in open >>>>>> return getattr(self, name)(url) >>>>>> File "/usr/lib64/python2.7/urllib.py", line 359, in open_http >>>>>> return self.http_error(url, fp, errcode, errmsg, headers) >>>>>> File "/usr/lib64/python2.7/urllib.py", line 372, in http_error >>>>>> result = method(url, fp, errcode, errmsg, headers) >>>>>> File "/usr/lib64/python2.7/urllib.py", line 683, in http_error_401 >>>>>> errcode, errmsg, headers) >>>>>> File "/usr/lib64/python2.7/urllib.py", line 381, in http_error_default >>>>>> raise IOError, ('http error', errcode, errmsg, headers) >>>>>> IOError: ('http error', 401, 'Unauthorized', <httplib.HTTPMessage >>>>>> instance at 0x7f083da78998>) >>>>>> >>>>>> ----------- >>>>>> Cao Tong >>>>>> >>>>>> On 08/19/2015 10:32 AM, tony_caot...@163.com wrote: >>>>>> >>>>>>> Hi All: >>>>>>> >>>>>>> Does any one have any idea ? Thanks. >>>>>>> >>>>>>> ----------- >>>>>>> Cao Tong >>>>>>> >>>>>>> On 08/18/2015 06:04 PM, tony_caot...@163.com wrote: >>>>>>> >>>>>>>> In ParamProcessWorker::setFieldValue() I found this lins: >>>>>>>> >>>>>>>> case DATE: >>>>>>>> // This piece of code is for maintaining backward >>>>>>>> compatibility >>>>>>>> // and support both the date formats(Bug 9724) >>>>>>>> >>>>>>>> Is it related to my problem? Where can I found the descriptions >>>>>>>> about BUG9724 ? >>>>>>>> >>>>>>>> ----------- >>>>>>>> Cao Tong >>>>>>>> >>>>>>>> On 08/18/2015 05:54 PM, tony_caot...@163.com wrote: >>>>>>>> >>>>>>>>> Hello, >>>>>>>>> >>>>>>>>> When I use timestamp format startdate="2015-07-31", it works find. >>>>>>>>> When I use it like this startdate="2015-07-31 13:00:00". >>>>>>>>> It return a error >>>>>>>>> IOError: ('http error', 401, 'Unauthorized', <httplib.HTTPMessage >>>>>>>>> instance at 0x16dca70>) >>>>>>>>> >>>>>>>>> Could anyone tell me why ? >>>>>>>>> >>>>>>>>> I have read the code >>>>>>>>> "DefaultLoginAPIAuthenticatorCmd::authenticate()" , but I am still not >>>>>>>>> understand what was happening, >>>>>>>>> it seems authenticate failed, but why?? >>>>>>>>> >>>>>>>>> ----------- >>>>>>>>> Cao Tong >>>>>>>>> >>>>>>>>> On 07/31/2015 07:07 PM, tony_caot...@163.com wrote: >>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> was this format is enabled in ACS 4.5.1 like /"yyyy-MM-dd >>>>>>>>>> HH:mm:ss" >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> / I found it in 4.5.0 API doc, but it seems not enabled. >>>>>>>>>> >>>>>>>>>> http://cloudstack.apache.org/api/apidocs-4.5/user/listEvents.html >>>>>>>>>> >>>>>>>>>> api.listEvents(startdate="2015-07-31 13:00:00") >>>>>>>>>>>>> >>>>>>>>>>>> Traceback (most recent call last): >>>>>>>>>> File "<stdin>", line 1, in <module> >>>>>>>>>> File "call.py", line 48, in handlerFunction >>>>>>>>>> return self._make_request(name, kwargs) >>>>>>>>>> File "call.py", line 60, in _make_request >>>>>>>>>> data = self._http_get(self.value) >>>>>>>>>> File "call.py", line 53, in _http_get >>>>>>>>>> response = urllib.urlopen(url) >>>>>>>>>> File "/usr/lib64/python2.7/urllib.py", line 87, in urlopen >>>>>>>>>> return opener.open(url) >>>>>>>>>> File "/usr/lib64/python2.7/urllib.py", line 208, in open >>>>>>>>>> return getattr(self, name)(url) >>>>>>>>>> File "/usr/lib64/python2.7/urllib.py", line 359, in open_http >>>>>>>>>> return self.http_error(url, fp, errcode, errmsg, headers) >>>>>>>>>> File "/usr/lib64/python2.7/urllib.py", line 372, in http_error >>>>>>>>>> result = method(url, fp, errcode, errmsg, headers) >>>>>>>>>> File "/usr/lib64/python2.7/urllib.py", line 683, in http_error_401 >>>>>>>>>> errcode, errmsg, headers) >>>>>>>>>> File "/usr/lib64/python2.7/urllib.py", line 381, in >>>>>>>>>> http_error_default >>>>>>>>>> raise IOError, ('http error', errcode, errmsg, headers) >>>>>>>>>> IOError: ('http error', 401, 'Unauthorized', <httplib.HTTPMessage >>>>>>>>>> instance at 0x16dca70>) >>>>>>>>>> >>>>>>>>>> my ACS version: >>>>>>>>>> >>>>>>>>>> [root@cs ~]# rpm -qa |grep cloud >>>>>>>>>> cloudstack-management-4.5.1-shapeblue0.el6.x86_64 >>>>>>>>>> cloudstack-awsapi-4.5.1-shapeblue0.el6.x86_64 >>>>>>>>>> cloudstack-agent-4.5.1-shapeblue0.el6.x86_64 >>>>>>>>>> cloudstack-common-4.5.1-shapeblue0.el6.x86_64 >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Find out more about ShapeBlue and our range of CloudStack related >>>>> services >>>>> >>>>> IaaS Cloud Design & Build< >>>>> http://shapeblue.com/iaas-cloud-design-and-build//> >>>>> CSForge – rapid IaaS deployment framework< >>>>> http://shapeblue.com/csforge/> >>>>> CloudStack Consulting<http://shapeblue.com/cloudstack-consultancy/> >>>>> CloudStack Software Engineering< >>>>> http://shapeblue.com/cloudstack-software-engineering/> >>>>> CloudStack Infrastructure Support< >>>>> http://shapeblue.com/cloudstack-infrastructure-support/> >>>>> CloudStack Bootcamp Training Courses< >>>>> http://shapeblue.com/cloudstack-training/> >>>>> >>>>> This email and any attachments to it may be confidential and are >>>>> intended solely for the use of the individual to whom it is addressed. Any >>>>> views or opinions expressed are solely those of the author and do not >>>>> necessarily represent those of Shape Blue Ltd or related companies. If you >>>>> are not the intended recipient of this email, you must neither take any >>>>> action based upon its contents, nor copy or show it to anyone. Please >>>>> contact the sender if you believe you have received this email in error. >>>>> Shape Blue Ltd is a company incorporated in England & Wales. ShapeBlue >>>>> Services India LLP is a company incorporated in India and is operated >>>>> under >>>>> license from Shape Blue Ltd. Shape Blue Brasil Consultoria Ltda is a >>>>> company incorporated in Brasil and is operated under license from Shape >>>>> Blue Ltd. ShapeBlue SA Pty Ltd is a company registered by The Republic of >>>>> South Africa and is traded under license from Shape Blue Ltd. ShapeBlue is >>>>> a registered trademark. >>>>> >>>> Find out more about ShapeBlue and our range of CloudStack related >>>> services >>>> >>>> IaaS Cloud Design & Build< >>>> http://shapeblue.com/iaas-cloud-design-and-build//> >>>> CSForge – rapid IaaS deployment framework<http://shapeblue.com/csforge/ >>>> > >>>> CloudStack Consulting<http://shapeblue.com/cloudstack-consultancy/> >>>> CloudStack Software Engineering< >>>> http://shapeblue.com/cloudstack-software-engineering/> >>>> CloudStack Infrastructure Support< >>>> http://shapeblue.com/cloudstack-infrastructure-support/> >>>> CloudStack Bootcamp Training Courses< >>>> http://shapeblue.com/cloudstack-training/> >>>> >>>> This email and any attachments to it may be confidential and are >>>> intended solely for the use of the individual to whom it is addressed. Any >>>> views or opinions expressed are solely those of the author and do not >>>> necessarily represent those of Shape Blue Ltd or related companies. If you >>>> are not the intended recipient of this email, you must neither take any >>>> action based upon its contents, nor copy or show it to anyone. Please >>>> contact the sender if you believe you have received this email in error. >>>> Shape Blue Ltd is a company incorporated in England & Wales. ShapeBlue >>>> Services India LLP is a company incorporated in India and is operated under >>>> license from Shape Blue Ltd. Shape Blue Brasil Consultoria Ltda is a >>>> company incorporated in Brasil and is operated under license from Shape >>>> Blue Ltd. ShapeBlue SA Pty Ltd is a company registered by The Republic of >>>> South Africa and is traded under license from Shape Blue Ltd. ShapeBlue is >>>> a registered trademark. >>>> >>> >>> >>> Find out more about ShapeBlue and our range of CloudStack related >> services >> >> IaaS Cloud Design & Build< >> http://shapeblue.com/iaas-cloud-design-and-build//> >> CSForge – rapid IaaS deployment framework<http://shapeblue.com/csforge/> >> CloudStack Consulting<http://shapeblue.com/cloudstack-consultancy/> >> CloudStack Software Engineering< >> http://shapeblue.com/cloudstack-software-engineering/> >> CloudStack Infrastructure Support< >> http://shapeblue.com/cloudstack-infrastructure-support/> >> CloudStack Bootcamp Training Courses< >> http://shapeblue.com/cloudstack-training/> >> >> This email and any attachments to it may be confidential and are intended >> solely for the use of the individual to whom it is addressed. Any views or >> opinions expressed are solely those of the author and do not necessarily >> represent those of Shape Blue Ltd or related companies. If you are not the >> intended recipient of this email, you must neither take any action based >> upon its contents, nor copy or show it to anyone. Please contact the sender >> if you believe you have received this email in error. Shape Blue Ltd is a >> company incorporated in England & Wales. ShapeBlue Services India LLP is a >> company incorporated in India and is operated under license from Shape Blue >> Ltd. Shape Blue Brasil Consultoria Ltda is a company incorporated in Brasil >> and is operated under license from Shape Blue Ltd. ShapeBlue SA Pty Ltd is >> a company registered by The Republic of South Africa and is traded under >> license from Shape Blue Ltd. ShapeBlue is a registered trademark. >> > > > >