errore di autenticazione: in grado di rispondere a qualsiasi di queste sfide: {} Android - 401 non autorizzatoErrore di autenticazione: in grado di rispondere a qualsiasi di queste sfide: {} Android - 401 non autorizzato
ho preso di riferimento da questo link Authentication Error when using HttpPost with DefaultHttpClient on Android
Sto lavorando all'app per Android in quella supportata in Drupal. In questo sto inviando dati dall'app Android al sito Web di drupal - webservice in formato JSON. Ora posso leggere i dati JSON dal webservice di Drupal e scriverlo nella mia applicazione Android. Ma di fronte a problema per iscritto su Drupal da Android, genera la risposta con codice di stato
401 Unauthorized
Da app nativa Android genera 401, mentre da PhoneGap-da Android quando avvio la procedura richiesta AJAX funziona perfettamente & scrive un articolo o pagina sul sito di drupal. in modo che significa lavoro webservice perfettamente &
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
qui è il mio codice per 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<NameValuePair> params = new ArrayList<NameValuePair>();
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;
}
}
}
Ecco l'logcat che sto ottenendo.
08-09 12:41:29.063: I/System.out(336): value of the post =============> [email protected]
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
Ecco la richiesta di PhoneGap Ajax funziona perfettamente.
$('#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;
});
=========================================== ======================================
Edit:
ho Ho provato vari metodi per Apache httpclient per il mio errore.Durante questa volta ho fatto qualche ricerca e cercato su google e ho scoperto alcune cose interessanti.
prima cosa che ho trovato che Android-Google Ufficialmente sconsiglia Apache HttpClient che sto utilizzando nel mio codice. Controlla questo link. In quel messaggio Link di Jesse Wilson del team Dalvik. In questo suggeriscono di usare HttpURLConnection invece di DefaultHttpClient e anche di scrivere che il team Android non svilupperà più Apache httpclient. quindi è la versione precedente che sto usando.
http://android-developers.blogspot.in/2011/09/androids-http-clients.html
secondo cosa che ho trovato questo link modulo. Suggerisce che Android è in vendita con HttpClient 4.0 Beta2 di Apache, che ha un trabocchetto quando si tratta di autenticazione di base. Il metodo di autenticazione che sto utilizzando è HttpClient 3.x, che ho trovato da questo link. controllare il collegamento. http://hc.apache.org/httpclient-3.x/authentication.html#Preemptive_Authentication
Quindi il problema della versione.
http://dlinsin.blogspot.in/2009/08/http-basic-authentication-with-android.html
Ho anche trovato alcuni collegamenti con la potenziale soluzione di questo problema.
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?
da questi link, ho fatto una conclusione che se aggiorniamo l'Apache HttpClient all'ultima versione stabile, allora questo problema può essere risolto.
Ma questo non è direttamente possibile, in quanto Android Team ha ufficialmente interrotto il supporto per Apache httpclient.
Con questo collegamento Potrebbe essere possibile risolvere. Non l'ho provato ma ci sto lavorando.
È la libreria che può aiutare nell'aggiornamento della versione di httpclient in Android.
L'altra soluzione potrebbe essere utilizzando HttpURLConnection .Sono inoltre lavorando su di esso.
ma la maggior parte persone qui su StackOverflow e Internet sembra usando DefaultHttpCLient con Android. E naturalmente funziona anche con me per tutta la mia applicazione, inclusi login, registrazione, lettura da server e sessione e altre funzionalità. Solo che non funziona con direttamente postare qualche articolo sul mio server-Drupal website. Funziona perfettamente con la richiesta POST durante la registrazione dell'utente sul server.
Quindi amici, qualche suggerimento a riguardo? perché non funziona solo con l'articolo di post?
ho visto anche questa domanda http://stackoverflow.com/questions/10407547/error-http-1-1-401-unauthorized-with-basic-authentication-in-android-ews-201? rq = 1 e ho provato nel mio codice ... con il passaggio di nome utente e password, ma ancora non funziona. Ancora la stessa risposta -> 401 –
Prova http: // StackOverflow.it/questions/8022800/problem-doing-ajax-requests-with-a-phonegap-application –
@ChanchalShelar Non ho problemi con PhoneGap ... funziona perfettamente ... Ho problemi con l'applicazione Android Java. Quindi qui la mia domanda è: lo stesso server funziona con PhoneGap, quindi perché non funziona con Android. –