I need to use a SOAP web service using Android.
The problem is that before requesting a specific function, I need to authenticate the client using a basic HTTP request.
Do you know how to do this with KSOAP?
Until now, I tried to use the overloaded httpsTransportSE.call () method, as it suggests specifying additional headers for the http connection
(link: 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" is the string "user: pass" encoded in the base 64
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.dotNet = true;
soapEnvelop.setOutputSoapObject(Request);
List<HeaderProperty> headerPropertieList = new ArrayList<HeaderProperty>();
headerPropertyList.add(new HeaderProperty("Authorization", "Basic : cG9ydHdzOjEyM3F3ZUFTRA=="));
HttpsTransportSE httpsse = new HttpsTransportSE(URL, 443, "", 5000);
try {
httpsse.call(SOAP_ACTION, soapEnvelop, headerPropertyList);
SoapPrimitive resultString = (SoapPrimitive) soapEnvelop
.getResponse();
tv.setText("Status: ");
} catch (Exception e) {
tv.setText("Some error," + " "
+ e.getMessage());
}
But I got the message "permission denied."