之前用ksoap2调用webservice,没什么问题。最近一个项目中,远程webservice中需要填一个什么用户名和密码(认证信息),在SOAP-UI中的填写方式是:右击接口名称-> Show Interface Viewer, 在对话框中的Username和Password

ksoap2 设置SOAP Basic Authentication(基本身份认证)_制作

那么在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的返回内容

问题解决。