2011-04-04 27 views
7

Aquí hay un fragmento de mi código. Estoy intentando iniciar sesión en el sitio web utilizando HTTPOST. Sigo recibiendo "400 Bad Request" He intentado varias combinaciones. Intenté pasar nombre de usuario/contraseña como encabezado en lugar de NameValuePair. Pero el mismo resultado. ¿Hay algo que me falta?¿Por qué estoy recibiendo Http/1.1 400 Bad request?

HttpClient httpclient = new DefaultHttpClient(); 

HttpPost post = new HttpPost("https://identi.ca/main/login"); 


List <NameValuePair> nvps = new ArrayList <NameValuePair>(); 
nvps.add(new BasicNameValuePair("nickname", u)); 
nvps.add(new BasicNameValuePair("password", p)); 
nvps.add(new BasicNameValuePair("submit", "Login")); 

post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); 

HttpResponse response = httpclient.execute(post); 
HttpEntity entity = response.getEntity(); 

Log.i("Login form POST result: ", response.getStatusLine().toString()); 

Gracias por su ayuda.

+2

Debe mostrarnos la solicitud. Intenta obtenerlo de los registros. – Zepplock

Respuesta

7

Un servicio HTTP enviará una respuesta de 400 si cree que ha enviado un mensaje no válido/incorrecto/inapropiado. No hay forma de saber a partir de su código, cuáles serán los argumentos reales enviados, o (más importante) lo que el servidor espera que envíe.

para diagnosticar esta tendrá que:

  • averiguar lo que su código es en realidad enviando, y
  • averiguar lo que el servidor está esperando que usted envíe.

La segunda puede implicar:

  • mirando la página (s) web que un usuario normal con un navegador web utiliza para realizar la solicitud,
  • mirando el cuerpo de la respuesta 400 usted está recibiendo del servidor,
  • mirando los registros del servidor, y/o
  • mirando la documentación de la API web del servidor (o el código fuente).

En este caso, parece que hay una token parámetro adicional que necesita ser suministrado.

Sin embargo, sospecho que podría estar tomando el enfoque equivocado por completo. El sitio "identi.ca" usa StatusNet que tiene un par de published APIs para los clientes. No hay mención de hablar con la URL de "inicio de sesión" que pude ver.

+0

Acepto que "identi.ca" ha publicado API. Estoy intentando navegar en sitios web y usar HTTP. – chanakya

6

Al buscar en la fuente de esa página de inicio de sesión, hay un campo oculto llamado token que probablemente tenga que devolver al servidor. Deberá OBTENER primero el contenido de esa página, extraer el valor del token e incluirlo en su respuesta POST.

+0

Gracias Greg. Te dejaré saber cómo va eso. – chanakya

Cuestiones relacionadas