Autenticación HTTP básica con KSOAP para android

Necesito consumir un servicio web SOAP utilizando Android.

El problema es que antes de la solicitud de una función en particular, necesito autenticar un cliente utilizando la solicitud http básica.

¿Sabe cómo hacer esto usando KSOAP?

Hasta este momento he intentado utilizar el método sobrecargado de httpsTransportSE.call (), ya que sugieren que puedo especificar encabezados adicionales para la conexión http

(Ref: https://github.com/mosabua/ksoap2-android/blob/master/ksoap2-j2se/src/main/java/org/ksoap2/transport/HttpTransportSE.java )

headerPropertyList.add(new HeaderProperty("Authorization", "Basic : dXNlcjpwYXNz")); 

"CdXNlcjpwYXNz" es una cadena codificada en base 64 de "user: pass"

  public List call(String soapAction, SoapEnvelope envelope, List headers) * @param headers a list of HeaderProperties to be http header properties when establishing the connection private static final String SOAP_ACTION = "someaddress/IPortReporting/GetPortStatus"; private static final String METHOD_NAME = "methodname"; private static final String NAMESPACE = "http://ssn.someaddress/2.0/"; private static final String URL = "new.someaddress/functionName.svc"; SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); Request.addProperty("MessageId", "1"); SoapSerializationEnvelope soapEnvelop = new SoapSerializationEnvelope( 11); //soapEnvelop.headerOut = addHeaders(); soapEnvelop.dotNet = true; soapEnvelop.setOutputSoapObject(Request); List<HeaderProperty> headerPropertieList = new ArrayList<HeaderProperty>(); headerPropertyList.add(new HeaderProperty("Authorization", "Basic : cG9ydHdzOjEyM3F3ZUFTRA==")); //HeaderProperty headerProperty = new HeaderProperty() HttpsTransportSE httpsse = new HttpsTransportSE(URL, 443, "", 5000); try { httpsse.call(SOAP_ACTION, soapEnvelop, headerPropertyList); //httpsse.call(SOAP_ACTION, soapEnvelop); SoapPrimitive resultString = (SoapPrimitive) soapEnvelop .getResponse(); tv.setText("Status: "); } catch (Exception e) { tv.setText("Some error," + " " + e.getMessage()); } 

Pero tengo el mensaje "permiso denegado" informó de nuevo.

Prueba esto. Esto funcionó para mí, consumiendo el servicio .Net de la aplicación android. He utilizado ksoap2-android-assembly-2.5.8-jar-with-dependencies.jar

 String NAMESPACE = "http://www.namespace.com/"; String METHOD_NAME = "MethodName"; String SOAP_ACTION = "http://www.namespace.com/MethodName"; String URL = "https://www.namespace.com/services/Service.asmx"; SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); // Set all input params request.addProperty("property", "value"); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // Enable the below property if consuming .Net service envelope.dotNet = true; envelope.setOutputSoapObject(request); HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); try { List<HeaderProperty> headerList = new ArrayList<HeaderProperty>(); headerList.add(new HeaderProperty("Authorization", "Basic " + org.kobjects.base64.Base64.encode("username:password".getBytes()))); androidHttpTransport.call(SOAP_ACTION, envelope, headerList); SoapObject response = (SoapObject)envelope.getResponse(); //response.getProperty(0).toString(); } catch(Exception e) { e.printStackTrace(); } 

En la pregunta vinculada a esta, el segundo arg de la HeaderProperty no tiene dos puntos en ella – sería "Basic dXNlcjpwYXNz" – tal vez ese es el problema? (¿Cuál es correcto?)

Vea esto . He implementado un código simple que llama a un servicio web SOAP local (.asmx) de la aplicación de Android.

Se trata de un servicio web sencillo para autenticar el usuario mediante el nombre de usuario y la contraseña.

Espero que ayude

Aclamaciones

Lo más probable es que necesite incluir lo siguiente en su archivo de manifiesto de Android:

 <uses-permission android:name="android.permission.INTERNET" /> 

¿Has probado HttpTranspostBasicAuth?

Aquí está la información de referencia: http://ksoap2.sourceforge.net/doc/api/org/ksoap2/transport/HttpTransportBasicAuth.html

ESTA TRABAJO sólo https://stackoverflow.com/a/5614243/7198554 ….

 soapEnvelope.headerOut = new Element[1]; 

SoapSerializationEnvelope envelope -> SoapSerializationEnvelope envelope NAMESPACE esto -> http://tempuri.org/ mi código =>

 public Element buildAuthHeader() { Element h = new Element().createElement(NAMESPACE, "AuthHeader"); Element username = new Element().createElement(NAMESPACE, "Username"); username.addChild(Node.TEXT, "test"); h.addChild(Node.ELEMENT, username); // Element pass = new Element().createElement(NAMESPACE, "pass"); // pass.addChild(Node.TEXT, pass); // h.addChild(Node.ELEMENT, pass); return h; 

En VS C #

 public class AuthHeader : SoapHeader { public string Username; //public string Password; } 
  • ¿Por qué hay flujos en la API HttpURLConnection?
  • Http obtener solicitud en Android 2.3.3
  • HttpURLConnection de Android: controla los redireccionamientos de HTTP
  • Android Http obtener la sesión de cookies
  • Métodos obsoletos, cómo puedo reemplazarlo por nuevos
  • Conexión de http de Android con OkHttp No funciona
  • Reutilizando HttpURLConnection
  • Cómo abrir un servidor HTTP en reaccionar nativo
  • Android: HTTPClient
  • Buscando retroalimentación técnica en Nextreaming NexPlayer ™
  • EHOSTUNREACH (Sin ruta al host) en Android HTTP
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.