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.
- Consumo de energía de WebSockets
- ¿Cómo supervisaré las solicitudes Http de Pokemon Go?
- Archivo nunca descargado
- Cómo enviar una matriz String como nombre de valor básico par como HTTPPOST?
- ¿Cómo debo manejar los tiempos de espera del servidor y las respuestas de código de error a una entrada de http en la aplicación para Android?
¿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.
- Retrofit 2: responseBodyConverter convierte a objeto nulo
- ¿Detectar si url especificada es una imagen en Android?
- ¿Existe una mejor práctica aceptada para realizar solicitudes HTTP asíncronas en Android?
- Android - Enviar HTTPS Obtener solicitud
- HttpURLConnection de Android lanza EOFException en solicitudes HEAD
- Cadena de escape de EditText
- Cómo hacer HttpResponse trabajo más rápido?
- ¿Es posible utilizar el método BitmapFactory.decodeFile para decodificar una imagen desde la ubicación http?
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; }
- Intenta reabrir un objeto ya cerrado: sqlitequery
- Cambiar el color de fondo del elemento listview actual en el método getView del adaptador