views:

1249

answers:

2

Hi, I'm trying to create a J2ME app, which talks to webserver using HttpConnection connector.

When I am talking to the WebServer, I have to authenticate using Basic HTTP auth, which normally goes like

http://username:[email protected]/rest/api/method

But in J2ME, when I construct a url of this form, it doesn't work.

I also tried adding request property, hc = (HttpConnection) Connector.open(url); hc.setRequestProperty("User", "alagu"); hc.setRequestProperty("pass", "mypassword");

but didn't work.

Has anyone done j2me based HTTP auth before? Thanks in advance.

+3  A: 

It could be J2ME has no support for basic authentication, I might be wrong. If you want to try just setting the authentication header in the request yourself you'll likely need a different header then what you're using.

From the rfc:

To receive authorization, the client sends the userid and password, separated by a single colon (":") character, within a base64 [7] encoded string in the credentials.

[...]

If the user agent wishes to send the userid "Aladdin" and password "open sesame", it would use the following header field:

 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

So just create the string "User:Password", base64 encode it and then call setRequestProperty("Authorization", "Basic "+ encodedUserAndPass)

wds
Thanks wds, it worked!
Alagu
To make matters more fun, J2ME doesn't include a Base64 encoder in MIDP 2.0. Some vendors provide their own, so be careful importing them (Sun's WTK has one, but it's only in the WTK). From the looks of it, you're best off including your own, like: http://java.sun.com/docs/books/j2mewireless/examples/src/examples/netclient/BasicAuth.java
Steve Pomeroy
A: 

Incredible, it works like a charm:

String url = "hppt://www.example.com";
HttpConnection hc = (HttpConnection) Connector.open(url);
hc.setRequestProperty("Authorization", "Basic "+ BasicAuth.encode("user", "password"));