Androidアプリのサービスでdrupalを使用しています。ユーザー名とパスワードを使用してRESTサーバーに接続すると、200の応答が返されますが、ノードを作成しようとすると、401エラーが返されます。
HttpClientを使用していますが、Cookieの設定に注意する必要がありますか、それとも何が問題ですか?ログインしてノードやユーザーを作成するための認証を維持する正しい方法は何ですか...など。
何か提案やアイデアはありますか?
HttpResponse response = null;
HttpPost postRequest = null;
HttpClient httpClient = new DefaultHttpClient();
try {
postRequest = new HttpPost(
"http://192.168.1.104/?q=rest/user/login");
String loginString=String.format("{\"username\":\"%s\",\"password\":\"%s\"}", "user","pass");
Log.d("expression",loginString);
StringEntity input = new StringEntity(nodeText );
input.setContentType("application/json");
postRequest.setEntity(input);
response = httpClient.execute(postRequest);
if (response.getStatusLine().getStatusCode() != 201) {
}
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// here is the code to create a node
try {
HttpPost postRequest2 = new HttpPost(
"http://192.168.1.104/?q=rest/node");
String nodeText= String.format( "{\"type\":\"story\",\"title\":\" %s \",\"body\":\" %s \"}", title,"");
Log.d("expression",nodeText);
StringEntity input = new StringEntity(nodeText );
input.setContentType("application/json");
postRequest2.setEntity(input);
response = httpClient.execute(postRequest2);
if (response.getStatusLine().getStatusCode() != 201) {
}
System.out.println(response.getStatusLine().getStatusCode());
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
httpClient.getConnectionManager().shutdown();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
解決策のために編集: 最後に、問題はDrupal側からのものでした。サーバーのセットアップ中にセッション認証を確認する必要があります。私の場合は残りです:)したがって、httpClientが自動的にCookieを管理すると思います。