Ошибка аутентификации :Невозможно ответить ни на один из этих вызовов :{} Android -401 Неавторизованный

Ошибка аутентификации :Невозможно ответить ни на один из этих вызовов :{} Android -401 Неавторизованный

Я взял ссылку по этой ссылке Ошибка аутентификации при использовании HttpPost с DefaultHttpClient на Android

Я работаю над приложением для Android, которое поддерживается Drupal. В этом я отправляю данные из приложения для Android на веб-сервис drupal -в формате JSON. Теперь я могу читать данные JSON из веб-сервиса Drupal и записывать их в своем приложении для Android. Но столкнувшись с проблемой записи на друпал с андроида, генерирует ответ с кодом состояния

401 Unauthorized

Из нативного приложения для Android он генерирует 401, а из phonegap -из Android, когда я инициирую запрос AJAX, он отлично работает и пишет статью или страницу на веб-сайте drupal. так что это означает, что веб-сервис работает отлично &

my phonegap android app works perfectly there is problem with Android native JAVA application I am running my android application on Android2.3.4 -> Samsung Galaxy S Plus - Samsung GT-I9001

вот мой код для java android.

===============================

String url = "XXX";
strResponse1 = makeWebForPostIdea(url,title,body);

public static String makeWebForPostIdea(String url, String title,String body)
    {
        JSONStringer jsonobject = null;
        JSONObject json = null;
        JSONObject jsonnode = null;

        DefaultHttpClient client = new DefaultHttpClient();

Credentials creds = new UsernamePasswordCredentials("username", "password");
        client.getCredentialsProvider().setCredentials(new       AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), creds);
 HttpPost post = new HttpPost(url);
System.out.println("value of the post =============> "+post);
 try {
            JSONObject jsonvalue = new JSONObject();
            jsonvalue.put("value", body.toString());

            JSONArray array = new JSONArray();
            array.put(jsonvalue);

            jsonnode = new JSONObject();
            jsonnode.put("und", array);

            System.out.println("@@@@@@2    jsonnode=======>"+jsonnode.toString());


        } catch (JSONException e3) {
            // TODO Auto-generated catch block
            e3.printStackTrace();
        }
 try {
 jsonobject = new JSONStringer().array().object().key("und").object().key("0").object().key("value").value(body).endObject().endObject().endObject().endArray();
    System.out.println("=============>"+jsonobject);

        } catch (JSONException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }

         List params = new ArrayList();

                 params.add(new BasicNameValuePair("type","page"));

            params.add(new BasicNameValuePair("title",title));
            params.add(new BasicNameValuePair("language","und"));
            params.add(new BasicNameValuePair("body",jsonobject.toString()));

            System.out.println("value of the params =============> "+params);

        UrlEncodedFormEntity formEntity = null;
        try {
                formEntity = new UrlEncodedFormEntity(params);
        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        post.setEntity(formEntity);

        try {

            HttpResponse response = client.execute(post);

            int statusCode = response.getStatusLine().getStatusCode();
            System.out.println("=========> statusCode post idea=====> "+statusCode);    
            if (statusCode == HttpStatus.SC_OK)
            {
                HttpEntity entity = response.getEntity();
                InputStream is = entity.getContent();
                return iStream_to_String(is);
            }
            else
            {
                return "Hello This is status ==> :"+String.valueOf(statusCode);
            }
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

     public static String iStream_to_String(InputStream is1) {
            BufferedReader rd = new BufferedReader(new InputStreamReader(is1), 4096);
            String line;
            StringBuilder sb = new StringBuilder();
            try {
                while ((line = rd.readLine()) != null) {
                    sb.append(line);
                }
                rd.close();

            } catch (IOException e) {
                // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String contentOfMyInputStream = sb.toString();
        return contentOfMyInputStream;
            }

    }

   }

вот logcat, который я получаю.

 08-09 12:41:29.063: I/System.out(336): value of the post =============>      org.apache.http.client.methods.HttpPost@4053c3c8
 08-09 12:41:29.093: I/System.out(336): @@@@@@2    jsonnode=======>{"und":  [{"value":"ddddddd"}]}
 08-09 12:41:29.093: I/System.out(336): =============>[{"und":{"0":{"value":"ddddddd"}}}]
 08-09 12:41:29.103: I/System.out(336): value of the params =============> [type=page, title=hhhh, language=und, body=[{"und":{"0":{"value":"ddddddd"}}}]]
 08-09 12:41:30.913: W/DefaultRequestDirector(336): Authentication error: Unable to respond to any of these challenges: {}
 08-09 12:41:30.913: I/System.out(336): =========> statusCode post idea=====> 401
 08-09 12:41:30.924: I/System.out(336): =========> Response from post  idea => Hello This is status ==> :401

Вот мой запрос PhoneGap Ajax, он отлично работает.

$('#page_node_create_submit').live('click',function(){

  var title = $('#page_node_title').val();
  //if (!title) { alert('Please enter a title.'); return false; }

  var body = $('#page_node_body').val();
  //if (!body) { alert('Please enter a body.'); return false; }

  // BEGIN: drupal services node create login (warning: don't use https if you don't     have ssl setup)
  $.ajax({
      url: "XXX",
      type: 'post',
      data: 'node[type]=page&node[title]=' + encodeURIComponent(title) +  '&node[language]=und&node[body][und][0][value]=' + encodeURIComponent(body),
      dataType: 'json',
      error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert('page_node_create_submit - failed to login');
        console.log(JSON.stringify(XMLHttpRequest));
        console.log(JSON.stringify(textStatus));
        console.log(JSON.stringify(errorThrown));
      },
      success: function (data) {
      $.mobile.changePage("index.html", "slideup");
     }
  });
  // END: drupal services node create

  return false;

});

================================================== ===============================

Изменить:

Я пробовал различные методы для Apache httpclient для моей ошибки. За это время я провел некоторое исследование и искал в Google и обнаружил некоторые интересные вещи.

Первая вещь, которую я обнаружил, это то, что Android -Google официально не рекомендует Apache HttpClient, который я использую в своем коде. Проверьте эту ссылку. В этом сообщении Link от Джесси Уилсона из команды Dalvik. В том, что они предлагают использовать HttpURLConnection вместо DefaultHttpClient, а также пишут, что команда Android больше не будет разрабатывать Apache httpclient.так что это старая версия, которую я использую.

http://android-developers.blogspot.in/2011/09/androids-http-clients.html

Вторая вещь, которую я нашел по этой ссылке. Это предполагает, что Android поставляется с Apache HttpClient 4.0 Beta2, который имеет ловушку, когда дело доходит до базовой аутентификации. Я использую метод аутентификации HttpClient 3.x, о котором я узнал из этой ссылки. проверьте ссылку.http://hc.apache.org/httpclient-3.x/authentication.html#Preemptive_Authentication

Итак, проблема с версией.

http://dlinsin.blogspot.in/2009/08/http-basic-authentication-with-android.html

Я также нашел несколько ссылок с возможным решением этой проблемы.

http://ogrelab.ikratko.com/using-newer-version-of-httpclient-like-4-1-x/

Apache HttpClient 4.1 on Android

What version of Apache HTTP Client is bundled in Android 1.6?

По этим ссылкам я сделал вывод, что если обновить Apache HttpClient до последней стабильной версии, то эту проблему можно решить.

Но это напрямую невозможно, так как команда Android официально прекратила поддержку httpclient Apache.

С этой ссылкой можно было бы решить. Я не пробовал, но я работаю над этим.

Это библиотека, которая может помочь в обновлении версии httpclient в Android.

http://code.google.com/p/httpclientandroidlib/

Другим решением может быть использование HttpURLConnection . Я также работаю над этим.

Но большинство людей здесь, в stackoverflow и в Интернете, похоже, используют DefaultHttpCLient с Android. И, конечно же, он также работает со мной во всем моем приложении, включая вход в систему, регистрацию, чтение с сервера и сеанса и другие функции. Просто он не работает с прямой публикацией какой-либо статьи на моем сервере -веб-сайт Drupal. Он отлично работает с запросом POST во время регистрации пользователя на сервере.

Итак, друзья, есть предложения по этому поводу? почему он не работает только с публикацией статьи?

12
задан Community 23 May 2017 в 12:01
поделиться