1

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を管理すると思います。

4

1 に答える 1

0

クッキーが必要なようです。

通常、ログインメソッドからの応答としてCookieを取得します。それを入手し、保管し、引き出して、HttpPostalaのヘッダーに貼り付けます。

HttpPost post = new HttpPost(uri);
SharedPreferences settings = context.getSharedPreferences(LOGIN_PREFS, 0);
String cookie = settings.getString(kCOOKIE, "");
post.addHeader("Cookie", cookie);
于 2012-07-11T17:33:44.937 に答える