之前用ksoap2调用webservice,没什么问题。最近一个项目中,远程webservice中需要填一个什么用户名和密码(认证信息),在SOAP-UI中的填写方式是:右击接口名称-> Show Interface Viewer, 在对话框中的Username和Password
那么在ksoap2(Android)中怎样实现呢?
查资料查了好久,得知这里的用户名和密码称为Basic Authentication, 根据这个线索,网上找到了正确的写法:
参考:https://stackoverflow.com/questions/5177939/basic-http-authentication-using-ksoap-for-android
我的代码如下:
//ksoap2
String NAMESPACE = "xxxxx.org";
String methodName = "doLogin";
String soapAction = NAMESPACE + methodName;
SoapObject request = new SoapObject(NAMESPACE, methodName);
request.addProperty("param1", "参数1");
request.addProperty("param2", "参数2");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER11);
envelope.bodyOut = request; //由于是发送请求,所以是设置bodyOut
envelope.dotNet = true; //由于是.net开发的webservice,所以这里要设置为true
HttpTransportSE httpTransportSE = new HttpTransportSE(WSDL_URI);
List<HeaderProperty> headers = new ArrayList<HeaderProperty>();
//这一步设置Basic Authentication, 假设基本认证信息的用户名为elabcare,密码为123456
headers.add(new HeaderProperty("Authorization", "Basic "+ Base64.encode("elabcare:123456".getBytes())));
httpTransportSE.call(soapAction, envelope, headers);
SoapObject object = (SoapObject) envelope.bodyIn;
return object.getProperty(0).toString(); //webservice的返回内容
问题解决。