gpt4 book ai didi

android - 使用 ksoap2-android 订阅共享点网络服务时出现身份验证错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:48 25 4
gpt4 key购买 nike

我正在编写一个 Android 应用程序,它将在 sharepoint 2010 中使用 lists.amx 服务的 getlist() 方法。我正在使用 ksoap2-android 来处理我的 soap 消息。当我尝试进行身份验证时,我得到一个 xmlpullparser exception expected START_TAG...为什么以下代码不会对 Sharepoint 服务器进行身份验证?

这是我的代码:

public class SharepointList extends Activity {
private static final String SOAP_ACTION = "http://schemas.microsoft.com/sharepoint/soap/GetList";
private static final String METHOD_NAME = "GetList";
private static final String NAMESPACE = "http://schemas.microsoft.com/sharepoint/soap/" ;
private static final String URL = "http://<ip of sharepoint server>/_vti_bin/lists.asmx";

private TextView result;
private Button btnSubmit;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

result = (TextView)findViewById(R.id.textView1);
btnSubmit = (Button)findViewById(R.id.button1);
btnSubmit.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if(v.getId() == R.id.button1)
{
String list = getMobileTestList();
result.setText(list);
}

}

});


}
private String getMobileTestList()
{
PropertyInfo pi = new PropertyInfo();
pi.setName("listName");
pi.setValue("Mobile Test List");

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty(pi);

String authentication = android.util.Base64.encodeToString("username:password".getBytes(), android.util.Base64.DEFAULT);
List<HeaderProperty> headers = new ArrayList<HeaderProperty>();
headers.add(new HeaderProperty("Authorization","Basic " +authentication));
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);


HttpTransportSE transport = new HttpTransportSE(URL);
try
{
transport.debug = true;
transport.call(SOAP_ACTION, envelope, headers);
//transport.call(SOAP_ACTION, envelope);
Object result = envelope.getResponse();
return result.toString();

}
catch(Exception e)
{
return e.toString();
}
}
}

这是 transport.requestdump(前面的 '<' 已删除):

  • v:信封 xmlns:i="http://www.w3.org/2001/XMLSchema-instance"xmlns:d="http://www.w3.org/2001/XMLSchema"xmlns:c= "http://schemas.xmlsoap.org/soap/encoding/"xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
    • v:标题/>
    • v:正文>
      • GetList xmlns="http://schemas.microsoft.com/sharepoint/soap/"id="o0"c:root="1">
        • listName i:type="d:string">移动测试列表
    • /GetList>
    • /v:正文>
  • /v:信封>

这是 transport.responsedump(前面的 '<' 已删除):

  • !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
    • HTML>
    • 负责人>
      • TITLE>错误的请求
      • META HTTP-EQUIV="Content-Type"Content="text/html; charset=us-ascii">
    • /头>
    • body >
      • h2>错误的请求 - 无效的主机名
      • hr> p>HTTP 错误 400。请求主机名无效。

    • /正文>
  • /HTML>

最佳答案

也许可以尝试以下方法:

String authentication = android.util.Base64.encodeToString("username:password".getBytes(), android.util.Base64.NO_WRAP);

默认情况下,Android Base64 实用程序会在编码字符串的末尾添加一个换行符。这会使 HTTP header 无效并导致“错误请求”。

Base64.NO_WRAP 标志可以防止这种情况并保持 header 的完整性。

关于android - 使用 ksoap2-android 订阅共享点网络服务时出现身份验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5969107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com