我试图用RestLet实现简单的Androd客户端作为我的论文.Evrything在HTTP上工作得很好但我必须通过HTTPS使用自签名证书才能使用它,这就是我遇到的问题。 我无法找到有关如何在Android上使用RestLet实现此功能的任何有用的文章或类似内容。我知道如何使用Android Developers 中的代码执行此操作,但我需要使用Restlet类来执行此操作。
我设法实现了一些将执行GET方法的代码(虽然很慢,从服务器获取数据大约需要20-30秒),但我遇到了PUT方法的问题。 我使用以下代码实现HTTPS客户端
private static ClientResource makeInstance(String url, Context con) {
Reference reference = new Reference(url);
Log.d("URL", url);
String keyStoreFileAbsolutePath = PreferenceManager
.getDefaultSharedPreferences(con).getString(
Constants.PREF_KEY_KEYSTORE_FILE_PATH, "");
System.setProperty("javax.net.ssl.trustStore",keyStoreFileAbsolutePath);
System.setProperty("javax.net.ssl.trustStorePassword", "ks090278d");
System.setProperty("ssl.TrustManagerFactory.algorithm",
javax.net.ssl.KeyManagerFactory.getDefaultAlgorithm());
org.restlet.Context context = new org.restlet.Context();
context.getAttributes().put("hostnameVerifier", new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
ClientResource resource = new ClientResource(context, reference);
Engine.getInstance().getRegisteredClients().clear();
Engine.getInstance().getRegisteredClients()
.add(new HttpClientHelper(null));
resource.release();
return resource;
}
我正在使用它
ClientResource request = new ClientResource(url);
request.setRetryAttempts(0);
Series<Header> responseHeaders = (Series<Header>) request.getResponse()
.getAttributes().get("org.restlet.http.headers");
if (responseHeaders == null) {
responseHeaders = new Series(Header.class);
request.getRequestAttributes().put("org.restlet.http.headers",
responseHeaders);
}
responseHeaders.add(new Header("Accept", "application/json;"));
responseHeaders.add(new Header("Content-Type", "application/json;"));
responseHeaders.add(new Header("Authorization",
"Basic ZXN0dWRlbnQ6YW5kcm9pZA==;"));
try {
request.put(new JsonRepresentation(jsonString));
Response response = request.getResponse();
if (response != null) {
Log.d("Response", "HTTP Response: " + response.toString());
ResponseHandler
.handleResponse(response);
}
} catch (Exception e) {
}
当我执行此请求时,我得到&#34;内部服务器错误 - 500&#34;。我只使用基本相同的GET方法代码
request.put(new JsonRepresentation(jsonString));
我正在做
request.get();
并且它有效(尽管如上所述,速度很慢)。
我检查了这是否是由于服务器出现了一些错误,但我认为不是因为当我使用类似于Android开发者代码的代码时以及我使用的代码时,我设法得到了适当的响应尝试从Chrome中的RestClient执行PUT到相同的URL。
任何人都可以给我任何建议如何让这个工作?我不确定我的方法是否适合开始,可能是我从一开始就走错了方向。 事先提前了。