使用KSOAP为Android基本HTTP认证 [英] Basic HTTP authentication using KSOAP for android

查看:190
本文介绍了使用KSOAP为Android基本HTTP认证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要采用Android消耗SOAP的Web服务。

的问题是,要求提供特定的功能之前,我需要使用基本的HTTP请求来验证客户端。

你知道如何使用KSOAP做到这一点?

直到这一刻我已经使用httpsTransportSE.call,因为它表明,我可以指定其他标头的HTTP连接重载方法()试图

  

(参考:   <一href="https://github.com/mosabua/ksoap2-android/blob/master/ksoap2-j2se/src/main/java/org/ksoap2/transport/HttpTransportSE.java" rel="nofollow">https://github.com/mosabua/ksoap2-android/blob/master/ksoap2-j2se/src/main/java/org/ksoap2/transport/HttpTransportSE.java)

  headerPropertyList.add(新HeaderProperty(授权,基本:dXNlcjpwYXNz));
 

cdXNlcjpwYXNz是基地64 EN codeD的字符串用户:通过

 公开名单调用(字符串的soapAction,信封的SoapEnvelope,表头)
    * @参数标头HeaderProperties名单是HTTP标头属性建立连接时



私有静态最后弦乐SOAP_ACTION =someaddress / IPortReporting / GetPortStatus;
私有静态最后弦乐METHOD_NAME =方法名;
私有静态最后弦乐NAMESPACE =HTTP://ssn.someaddress/2.0/;
私有静态最后字符串的URL =new.someaddress / functionName.svc;




SoapObject请求=新SoapObject(命名空间METHOD_NAME);
        Request.addProperty(的MessageId,1);

        SoapSerializationEnvelope soapEnvelop =新SoapSerializationEnvelope(
                11);
        //soapEnvelop.headerOut = addHeaders()一样;
        soapEnvelop.dotNet = TRUE;
        soapEnvelop.setOutputSoapObject(请求);


        名单&LT; HeaderProperty&GT; headerPropertieList =新的ArrayList&LT; HeaderProperty&GT;();
        headerPropertyList.add(新HeaderProperty(授权,基础:cG9ydHdzOjEyM3F3ZUFTRA ==));
        // HeaderProperty headerProperty =新HeaderProperty()

        HttpsTransportSE httpsse =新HttpsTransportSE(URL,443,,5000);



        尝试 {
            httpsse.call(SOAP_ACTION,soapEnvelop,headerPropertyList);
            //httpsse.call(SOAP_ACTION,soapEnvelop);

            SoapPrimitive resultString =(SoapPrimitive)soapEnvelop
                    .getResponse();
            tv.setText(状态:);
        }赶上(例外五){
            tv.setText(一些错误,+
                    + e.getMessage());
        }
 

但我的消息权限被拒绝的报道了。

解决方案

试试这个。这个工作对我来说,消费从Android应用程序的.Net服务。我已经使用kso​​ap2,机器人组装-2.5.8-JAR-与-dependencies.jar

 字符串NAMESPACE =htt​​p://www.namespace.com/;
字符串METHOD_NAME =方法名;
字符串SOAP_ACTION =htt​​p://www.namespace.com/MethodName;
字符串的URL =htt​​ps://www.namespace.com/services/Service.asmx;

      SoapObject请求=新SoapObject(命名空间METHOD_NAME);
          //设置所有输入PARAMS
          request.addProperty(财产,价值);
          SoapSerializationEnvelope包=新SoapSerializationEnvelope(SoapEnvelope.VER11);
         //启用下面的属性,如果消费的.Net服务
     envelope.dotNet = TRUE;
     envelope.setOutputSoapObject(要求);

     HttpTransportSE androidHttpTransport =新HttpTransportSE(URL);
     尝试
     {
         名单&LT; HeaderProperty&GT; headerList =新的ArrayList&LT; HeaderProperty&GT;();
         headerList.add(新HeaderProperty(授权,基本+ org.kobjects.base64.Base64.en code(用户名:密码.getBytes())));

         androidHttpTransport.call(SOAP_ACTION,信封,headerList);
         SoapObject响应=(SoapObject)envelope.getResponse();
         //response.getProperty(0)的ToString();
     }
     赶上(例外五)
     {
         e.printStackTrace();
     }
 

I need to consume a SOAP web service using Android.

The issue is that before request for a particular function I need to authenticate a client using basic http request.

Do you know how to do this using KSOAP?

Until this moment I have tried using overloaded method of httpsTransportSE.call() as it suggest that I can specify additional headers for http connection

(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" is base 64 encoded string of "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());
        }

But I have message "permission denied" reported back.

解决方案

Try this. This worked for me, consuming .Net service from android application. I have used 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();
     }

这篇关于使用KSOAP为Android基本HTTP认证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆