2010-11-20 24 views
8

Saludos,Android: obtener una respuesta desde una URL https

Estoy desarrollando una aplicación para Android y la necesidad de abrir una URL (con parámetros POST) a través de HTTPS y obtener la respuesta.

Existe la complicación adicional de que tengo un certificado autofirmado. También necesito aceptar cookies.

¿Alguien tiene alguna idea sobre dónde empezar?

Muchas gracias de antemano,

Respuesta

3

que logró ponerlo todo en marcha asyncronously con las dos galletas y https sin firmar.

He utilizado el código aquí:

http://masl.cis.gvsu.edu/2010/04/05/android-code-sample-asynchronous-http-connections/

y modificar para https sin firmar utilizando el código de Brian Yarger aquí:

Self-signed SSL acceptance on Android

(añadir el código anterior al inicio de la carrera () en HttpConnection.java)

Para hacer que las cookies funcionaran, tuve que modificar algunos códigos (P fragmento OST de HttpConnection.java):

  case POST: 
      HttpPost httpPost = new HttpPost(url); 
      httpPost.setEntity(new StringEntity(data)); 
      httpPost.addHeader("Cookie", Cookie.getCookie()); 
      response = httpClient.execute(httpPost); 

      Header[] headers=response.getAllHeaders(); 
      for(int i=0;i<headers.length;i++){ 
       if(headers[i].getName().equalsIgnoreCase("Set-Cookie")){ 
        //Log.i("i",headers[i].getName()+"---"+headers[i].getValue()); 
        Cookie.setCookie(headers[i].getValue()); 
        break; 
       } 
      } 
      break; 

Muchas gracias a todos por mí apuntando en la dirección,

17

Android viene con los comunes de Apache HTTP biblioteca incluido. La creación de una solicitud HTTPS POST es muy fácil:

HttpPost post = new HttpPost("https://yourdomain.com/yourskript.xyz"); 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
nameValuePairs.add(new BasicNameValuePair("postValue1", "my Value")); 
nameValuePairs.add(new BasicNameValuePair("postValue2", "2nd Value")); 
post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

HttpClient client = new DefaultHttpClient(); 
HttpResponse response = client.execute(post); 
HttpEntity entity = response.getEntity(); 

String responseText = EntityUtils.toString(entity); 

Android 4.x utiliza una versión de la biblioteca Commons http como todas las versiones inferiores a 4.0 están fuera de su ciclo de vida.

No puedo decir exactamente cómo registrar un certificado autofirmado para el HttpClient, pero mybe la documentación Commons http ayuda:

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e506

+0

Hola, muchas gracias por su respuesta. Está funcionando bien. Sin embargo, no se pueden obtener certificados sin firmar. Además, ¿alguna idea sobre cómo puedo hacer que tu código funcione de forma asíncrona? No quiero que la UI se cuelgue mientras espero respuestas. – Eamorr

+1

Como dijo David, debe iniciar un nuevo hilo y poner la acción posterior http en el método de ejecución. Los datos se pueden intercambiar entre subprocesos mediante el uso del sistema de controlador de androides. Es posible que desee echar un vistazo a la página de fundamentos de Android: http://developer.android.com/guide/topics/fundamentals.html#threads – marcus

Cuestiones relacionadas