error de autenticación: No se puede responder a cualquiera de estos desafíos: {} Android - 401 no autorizado de referenciaError de autenticación: No se puede responder a cualquiera de estos desafíos: {} Android - 401 no autorizado
he tomado desde este enlace Authentication Error when using HttpPost with DefaultHttpClient on Android
Estoy trabajando en la aplicación de Android en la que está respaldado en Drupal. En eso estoy enviando datos de la aplicación de Android al sitio web de drupal: servicio web en formato JSON. Ahora puedo leer datos JSON del servicio web de Drupal y escribirlos en mi aplicación para Android. Pero frente a un problema por escrito en Drupal desde androide, que genera la respuesta con código de estado
401 Unauthorized
De aplicación nativa de Android que genera 401, mientras que de PhoneGap-del androide cuando se inicio petición AJAX funciona perfectamente & escribe un artículo o página en el sitio web de drupal. por lo que significa el trabajo de servicio web perfectamente &
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
aquí es mi código java para 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;
}
}
}
aquí es el Logcat que estoy recibiendo.
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
Aquí está mi PhoneGap Ajax solicite que funcione a la perfección.
$('#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;
});
=========================================== ======================================
Editar:
tengo intenté varios métodos para mi error en httpcliente de Apache. Durante este tiempo investigué y busqué en Google y descubrí algunas cosas interesantes.
1st Lo que encontré es que Android-Google Oficialmente no recomienda Apache HttpClient que estoy usando en mi código. Mira este enlace En ese mensaje de Enlace de Jesse Wilson del equipo de Dalvik. En que sugieren utilizar HttpURLConnection en lugar de DefaultHttpClient y también escrito que el equipo de Android ya no desarrollará Apache httpclient. así que es la versión anterior que estoy usando.
http://android-developers.blogspot.in/2011/09/androids-http-clients.html
segundo cosa que he encontrado forma de este enlace. Sugiere que Android se envía con HttpClient 4.0 Beta2 de Apache, que tiene un inconveniente, cuando se trata de la Autenticación básica. El método de autenticación que estoy usando es de HttpClient 3.x, que he descubierto en este enlace. revisa el enlace. http://hc.apache.org/httpclient-3.x/authentication.html#Preemptive_Authentication
Así que el problema de la versión.
http://dlinsin.blogspot.in/2009/08/http-basic-authentication-with-android.html
También he encontrado algunos enlaces con posibles soluciones a este 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?
A partir de estos enlaces, hice una conclusión que si aumentamos el Apache HttpClient a la última versión estable, entonces este problema se puede resolver.
Pero esto directamente no es posible, ya que Android Team ha detenido oficialmente el soporte para el httpclient de Apache.
Con este enlace podría ser posible resolver. No lo he intentado pero estoy trabajando en eso.
Es la biblioteca que puede ayudar a actualizar la versión de httpclient en Android.
La otra solución podría estar utilizando HttpURLConnection .I También estoy trabajando en ella.
Pero la mayoría de la gente aquí en stackoverflow e Internet parece usar DefaultHttpCLient con Android. Y, por supuesto, también está trabajando conmigo a lo largo de mi aplicación, incluido el inicio de sesión, el registro, la lectura desde el servidor y la sesión, y otras funcionalidades. Simplemente no funciona con publicar directamente un artículo en mi servidor: el sitio web de Drupal. Funciona perfectamente con la solicitud POST durante el registro del usuario en el servidor.
Así que amigos, ¿alguna sugerencia sobre esto? ¿Por qué no funciona solo con publicar un artículo?
También he visto esta pregunta http://stackoverflow.com/questions/10407547/error-http-1-1-401-unauthorized-with-basic-authentication-in-android-ews-201? rq = 1 & lo probé en mi código ... con el nombre de usuario y la contraseña, pero todavía no funcionaba. Sigue la misma respuesta -> 401 –
Pruebe http: // stackoverflow.com/questions/8022800/problems-doing-ajax-requests-with-a-phonegap-application –
@ChanchalShelar No tengo problemas con el teléfono ... funciona perfectamente ... Tengo un problema con la aplicación Android de Java. Así que aquí mi pregunta es: el mismo servidor funciona con Phonegap, entonces ¿por qué no funciona con Android? –