7

我正在尝试创建一个 J2ME 应用程序,它使用HttpConnection连接器与网络服务器通信。

当我与 WebServer 交谈时,我必须使用 Basic HTTP auth 进行身份验证,这通常类似于

http://username:password@website.com/rest/api/method

但是在 J2ME 中,当我构造一个这种形式的 url 时,它不起作用。

我也尝试添加请求属性, hc = (HttpConnection) Connector.open(url); hc.setRequestProperty("User", "alagu"); hc.setRequestProperty("pass", "mypassword");

但没有用。

有没有人做过基于 j2me 的 HTTP 身份验证?提前致谢。

4

3 回答 3

11

可能是 J2ME 不支持基本身份验证,我可能错了。如果您想尝试自己在请求中设置身份验证标头,您可能需要一个与您正在使用的标头不同的标头。

来自rfc

为了接收授权,客户端在凭证中的 base64 [7] 编码字符串中发送用户 ID 和密码,由单个冒号 (":") 字符分隔。

[...]

如果用户代理希望发送用户 ID“Aladdin”和密码“open sesame”,它将使用以下标头字段:

 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

所以只需创建字符串“用户:密码”,base64对其进行编码,然后调用setRequestProperty("Authorization", "Basic "+ encodedUserAndPass)

于 2009-06-04T15:29:48.363 回答
3

难以置信,它就像一个魅力:

String url = "hppt://www.example.com";
HttpConnection hc = (HttpConnection) Connector.open(url);
hc.setRequestProperty("Authorization", "Basic "+ BasicAuth.encode("user", "password"));
于 2009-07-27T00:01:37.020 回答
1

我使用了 Bouncy Castle 加密库的 Base64 编码器/解码器。它在克服 Java ME/J2ME API 设置的许多限制方面非常强大。它是开源的,适用于 Java ME 和 Android。

于 2011-05-30T21:05:30.707 回答