Pues mirad qué casualidad, me hace falta aprender a hacer lo mismo pero desde Android. Una hayudita, compadres? Ya estoy con el goorgle de todas formas.
Pues mirad qué casualidad, me hace falta aprender a hacer lo mismo pero desde Android. Una hayudita, compadres? Ya estoy con el goorgle de todas formas.
Ya consigo encriptar en SHA1 (que no tenia ni idea de lo que era)
El caso es que tengo que hacer una app de prueba para iOS, que entra a una web para leer datos.
Primero hace login con user y pass. Si se loggea correctamente recibe {"success":true,"error":false,"msg":"OK","token":" xxxxxxxxxxxxxxxxxx"}
luego con el token xxxxxxxxxxxxxxxxxx me devuelve una base de datos que tengo que mostrar en el iPhone.
Esto:
Array
(
[success] => 1 [error] => [results] => Array
(
[0] => Array
(
[number] => 31
[sexo] => female
[nombre] => Fidela
[apellido] => Prieto
[calle] => El Roqueo 74
[ciudad] => Las Pedroñeras
[provincia] => Cuenca
[postal] => 16660
[pais] => ES
[email] => FidelaPrietoCasillas@spambob.com [telephonenumber] => 969 010 583
[birthday] => 7/7/1979
[kilograms] => 81.7
[centimeters] => 174
[guid] => d3eeedfb-bdd1-4088-b016-22d5b5d097eb [latitude] => 39.369350
[longitude] => -2.765394
[image] => http://www.appadia.com/prueba/nophoto0.png
)
el caso es que solo consigo hacer login, pero luego ya no se como pasarle el token por [POST] y el limit por [GET]
y menos cuando reciba los datos, convertirlos para mostrar en tabla.
Todo esto para hacer una prueba, a ver si me cogen :S
va a estar muy complicado.....
Caminos fáciles no llevan lejos
Cuando pasas algo por get, esto va en la URL directamente, sin embargo por post va en el body de la petición.
Por tanto imaginate que la url es: http://www.laurl.com Usando tu propio código imaginemos que queremos pasar el parámetro limit=10 por get y el token que has dicho por post. Pues sería (te marco en negrita lo que añado a tu código):
Los datos que has pegado... eso es un var_dump de un array de PHP o ese es el formato exacto con el que te viene?Código:// Enviamos usuario y password y leemos datos de la web NSString *postString; postString = [NSString stringWithFormat:@"token=%@", variableQueTieneElToken]; // NSLog(postString); NSURL *url; url = [NSURL URLWithString:@"http://www.laurl.com?limit=10"]; <- Fíjate que en la URL va el parámetro directamente NSMutableURLRequest *req; req = [NSMutableURLRequest requestWithURL:url]; NSString *msgLength; msgLength = [NSString stringWithFormat:@"%d", [postString length]]; [req addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; [req addValue:msgLength forHTTPHeaderField:@"Content-Type"]; [req setHTTPMethod:@"POST"]; [req setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]]; conn = [[NSURLConnection alloc] initWithRequest:req delegate:self]; if (conn) { webData = [NSMutableData data]; }
EDIT: No estoy segura al 100% de que tu código no tenga memory leaks o problemas de punteros... Así que yo de ti lo revisaría bien por si acaso que no se ahora mismo de memoria qué metodos te hacen retain automático y cuales no.
-----Actualizado-----
Qué necesitas hacer exactamente? Un request por post pasando el SHA1 de un password? Porque en Android con el HttpRequest no es nada difícil y supongo que si ya estás mirando en google habrás dado con ello
Pues sip, sólo el detallito de hacerlo mejor en un AsyncTask y supongo que un Listener para la respuesta y como dios :P Preocupación--
-----Actualizado-----
Pues sip, sólo el detallito de hacerlo mejor en un AsyncTask y supongo que un Listener para la respuesta y como dios :P Preocupación--
No necesitas ningún listener. Si usas un AsyncTask lo que te devuelva el doInBackground se le pasa al onPostExecute. Ahí es donde puedes parsear la respuesta
Un ejemplo de una request con un AsyncTask podría ser:
Yo las AsyncTask a no ser que sea algo que se va a usar desde muchos sitios, las suelo poner como inner class del activity/clase que sea.Código:class RequestTask extends AsyncTask<String, String, String>{ @Override protected String doInBackground(String... uri) { HttpClient httpclient = new DefaultHttpClient(); HttpResponse response; String responseString = null; try { response = httpclient.execute(new HttpGet(uri[0])); StatusLine statusLine = response.getStatusLine(); if(statusLine.getStatusCode() == HttpStatus.SC_OK){ ByteArrayOutputStream out = new ByteArrayOutputStream(); response.getEntity().writeTo(out); out.close(); responseString = out.toString(); } else{ response.getEntity().getContent().close(); throw new IOException(statusLine.getReasonPhrase()); } } catch (ClientProtocolException e) { //TODO Handle exception } catch (IOException e) { //TODO Handle exception } return responseString; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); //Aquí el código para parsear la respuesta, por ejemplo: parseResponseString(result); } }
Ya se que soy un pesado, pero ayudarme con esto porfavor....
Tengo la función que convierte el password en formato sha1:
Spoiler: Ver
Luego la hago funcionar como he visto, pero no me funciona, me da un error:
NSString *inputStr =@"the string to crypt";
NSString *outputSHA1Str;
outputSHA1Str= sha1(inputStr);
Alguna idea?
Gracias !!
Caminos fáciles no llevan lejos
Si no pegas el error que te da... tampoco puedo decirte mucho xD
este es el error....
--------------------------------------------------------
Bueno, por fin lo he arreglado.
He cambiado de método para codificar el password
Spoiler: Ver
el hash es el código en sha1
Última edición por faraday; 12/10/2012 a las 12:29
Caminos fáciles no llevan lejos
Es un poco "sucio" convertir a hexadecimal de esa manera la verdad porque el método description te da la "descripción" del objeto en hexadecimal. Esto suele ser normalmente la posición de memoria en la que se encuentra el objeto, y aunque en este caso concreto si te devuelve el contenido de NSData en hexadecimal, no aconsejan usarlo desde Apple dado que el método description podría cambiar también en un futuro ya que no está pensado para eso (sino para la descripción del objeto en sí).
Por otro lado, si el NSData ya contiene una cadena en hexadecimal, el pasarlo a un string es trivial usando el método initWithData de NSString.
Por último la mejor manera de hacerlo sería crearte una categoría de NSData como sugieren aquí.
Marcadores