【问题标题】:xml-rpc commandline client cross compiled binary for androidxml-rpc 命令行客户端为 android 交叉编译的二进制文件
【发布时间】:2012-11-27 14:40:06
【问题描述】:

我想从我在 android 上的 shell 脚本访问 xml-rpc 服务器。我搜索了xml-rpc 客户端,但一无所获。我只想要xml-rpc 客户端命令行可执行文件,以便我可以在我的android 设备上的shell 脚本中使用它。那么有没有这样的二进制文件?

【问题讨论】:

    标签: android xml-rpc cross-compiling


    【解决方案1】:

    或者你可以使用 curl: http://wiki.secondlife.com/wiki/Category:LSL_XML-RPC

    我编写了一个 shell 脚本来生成 rpc.xml,它现在可以正常工作了:

    xmlrpc-client.sh

    #!/bin/bash
    # author jiyin@redhat.com
    
    TEMP=`getopt -o vt: --long target   -n 'example.bash' -- "$@"`
    if [ $? != 0 ] ; then echo "getopt fail, terminating..." >&2 ; exit 1 ; fi
    
    # Note the quotes around `$TEMP': they are essential!
    eval set -- "$TEMP"
    
    Usage() {
        echo "usage: $0 -t <rpcServUrl> <method> [arg1 arg2 ...]"
        exit 1
    }
    simpleArg() {
        local arg="$1"
        local type=${arg%%:*} val=${arg#*:}
            echo -e "${indent}<param><value><$type>$val</$type></value></param>"
    }
    structArg() {
        local arg="$1"
            : parse wait complete ...
    }
    
    while true ; do
        case "$1" in
        -t|--target) servUrl=$2; shift 2;;
        -v) verbose=--verbose; shift;;
        --) shift; break;;
        *) echo "Internal error!"; exit 1;;
        esac
    done
    [ -z "$servUrl" ] && Usage
    [ $# -lt 1 ] && Usage
    
    #<method> <arg1> <arg2> ... <argx>
    generateRequestXml() {
        method=$1; shift
        echo '<?xml version="1.0"?>'
        echo "<methodCall>"
        echo "    <methodName>$method</methodName>"
        echo "    <params>"
    
        indent="    "
        for arg; do
            indent="${indent}    "
            case $arg in
            struct:*) structArg "$arg";;
            *) simpleArg "$arg";;
            esac
        done
    
        echo "    </params>"
        echo "</methodCall>"
    }
    rpcxml=rpc$$.xml
    generateRequestXml "$@" > $rpcxml
    [ "$verbose" = "--verbose" ] && cat "$rpcxml"
    curl $verbose --data "@$rpcxml" "$servUrl" 2>/dev/null | xmllint --format -
    \rm -f $rpcxml
    

    【讨论】:

      【解决方案2】:

      structArg() 补全:

      structMember() {
          local arg=""
          local name= val=
          local type= val=
          local indent=    
      
          echo -e "    <member>"
          echo -e "    <name></name>"
          echo -e "    <value><></></value>"
          echo -e "    </member>"
      }
      structArg() {
          local args=""
          local type= val=
          local deep=0
      
          local cindent="    "
          local nindent=""
          echo -e "<param>\n<value>"
          eval set 
          for arg; do
              shift
              case  in
              struct:B*)
                  ((deep > 0)) && echo -e "<member>"
                  local name=
                  [ -n "" ] && echo -e "<name></name>"
                  echo -e "<struct>"
                  indent=""
                  nindent=""
                  ((deep++))
                  ;;
              struct:E)
                  indent=    
                  nindent=
                  echo -e "</struct>"
                  ((--deep > 0)) && echo -e "</member>"
                  ;;
              *)
                  structMember ""
                  ;;
              esac
          done
          echo -e "</value>\n</param>"
      }
      

      【讨论】:

        【解决方案3】:

        我有同样的问题,试试这个: http://acme.com/software/xmlrpc/ xmlrpc 是 XML-RPC 协议的命令行接口。

        【讨论】:

          猜你喜欢
          • 2018-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-26
          相关资源
          最近更新 更多