AnsweredAssumed Answered

Rest API - unable to do anything except login

Question asked by tshirtman on May 18, 2012
Latest reply on May 22, 2012 by tshirtman
Hi, i'm trying to use the rest api from python, with http://tcchou.tumblr.com/post/3164541478/activiti-process-is-controlled-by-pyrestclient (does'nt work currently) as a starting point i tried with various rest modules, i can get a successful login with methods like:

from json import JSONEncoder
from restclient.transport import HTTPLib2Transport
 
token = JSONEncoder().encode({'userId': 'kermit','password': 'kermit'})
httpclient.request('http://localhost:8080/activiti-rest/service/login', body=token, method='POST')
i get

(<HTTPResponse status 200 for http://localhost:8080/activiti-rest/service/login>, '{"success":true}')
or

from restful_lib import Connection
c = Connection('http://localhost:8080/activiti-rest/service')
c.request('login', method='POST', body=token, headers={'content-type': 'application/json;charset=UTF-8'})

i get :
u'body': u'{"success":true}', u'headers': {'status': '200', 'transfer-encoding': 'chunked', 'accept-ranges': 'bytes', 'vary': 'Accept-Charset, Accept-Encoding, Accept-Language, Accept', 'server': 'Restlet-Framework/2.0.8', 'date': 'Fri, 18 May 2012 17:28:56 GMT', 'content-type': 'application/json;charset=UTF-8'}}
but if i do :
c.request('process-engine', method='GET', body=token, headers={'content-type': 'application/json;charset=UTF-8'})
i get :
{u'body': u'<html>\n<head>\n   <title>Status page</title>\n</head>\n<body style="font-family: sans-serif;">\n<p style="font-size: 1.2em;font-weight: bold;margin: 1em 0px;">Forbidden</p>\n<p>Authentication is required</p>\n<p>You can
get technical details <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4">here</a>.<br>\nPlease continue your visit at our <a href="/">home page</a>.\n</p>\n</body>\n</html>\n', u'headers': {'status': '403', 'c
ontent-length': '407', 'accept-ranges': 'bytes', 'server': 'Restlet-Framework/2.0.8', 'date': 'Fri, 18 May 2012 17:32:08 GMT', 'content-type': 'text/html;charset=UTF-8', 'www-authenticate': 'Basic realm="Activiti Realm"'}}


and similar results with other methods:

now i saw most libs have a way to give username/password to use for automatic authentication, but the fact is the server require «userId» instead of «username», and i think that's why it doesn't work.

Just to be sure, i tried a java version from here (not very good at java but i did it) :
http://www.mastertheboss.com/component/content/article/82-activiti/311-activiti-faqs.html

and got similar (bad) results :


import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.auth.AuthScope;
import org.apache.http.entity.StringEntity;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.IOException;

class TestApp {
public static void main(String[] args) throws IOException {
DefaultHttpClient dhc = new DefaultHttpClient();
dhc.getCredentialsProvider().setCredentials(
new AuthScope( AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM),
new UsernamePasswordCredentials("kermit", "kermit"));

HttpPost hp = new HttpPost("http://localhost:8080/activiti-rest/service/process-instance");
hp.setEntity(new StringEntity("{\"processDefinitionId\":\"helloworld:1\"}", "UTF-8"));
HttpResponse processResponse = dhc.execute(hp);
System.out.println(IOUtils.toString(processResponse.getEntity().getContent()));
}
}

compilation :
javac -cp lib/apache-mime4j-0.6.jar:lib/commons-codec-1.3.jar:lib/commons-logging-1.1.1.jar:lib/httpclient-4.0.3.jar:lib/httpcore-4.0.1.jar:lib/httpmime-4.0.3.jar:lib/org.apache.servicemix.bundles.commons-io-1.3.2_1.jar test.java

running :
 java -cp .:lib/apache-mime4j-0.6.jar:lib/commons-codec-1.3.jar:lib/commons-logging-1.1.1.jar:lib/httpclient-4.0.3.jar:lib/httpcore-4.0.1.jar:lib/httpmime-4.0.3.jar:lib/org.apache.servicemix.bundles.commons-io-1.3.2_1.jar TestApp

result :

Status page

Forbidden

Authentication is required

You can get technical details here.
Please continue your visit at our home page.


now, i'm wondering, is anybody using the Rest API successfully?

Outcomes