【问题标题】:Sending and receiving SMS by command line with Huawei E3131 and HiLink on a debian systemdebian系统下使用华为E3131和HiLink命令行收发短信
【发布时间】:2016-10-27 06:21:17
【问题描述】:

我长时间在互联网上搜索如何在基于 debian 的 linux 系统上使用华为 E3131 和 HiLink 通过命令行发送短信的指南。他们都没有工作。看来,该软件有更新。


HiLink 向我显示以下版本:

  • 设备名称:E3131
  • 硬件版本:CU1E3131IM
  • 软件版本:22.521.23.00.00
  • Web 前端版本:17.100.08.00.03

以下问题:如何在带有 E3131 的基于 debian 的 linux 系统上通过命令行发送/接收短信?


There is a follow up question for setting up the hardware on a headless system on superuser

【问题讨论】:

    标签: shell sms debian dongle huawei-mobile-services


    【解决方案1】:

    我为我的华为E3276制作了python脚本:

    import requests, sys
    import xml.etree.ElementTree as ET
    
    msg = "From python"
    phone = "PHONE_NUMBER" #To fill
    ip = "192.168.1.1" #Dongle ip
    
    # get session
    session = requests.Session()
    # get token
    r = session.get("http://%s/api/webserver/token" % ip)
    root = ET.fromstring(r.content)
    token = root[0].text
    print "token", token
    
    # send sms
    headers = { "__RequestVerificationToken": token, "Content-Type": "text/xml" }
    data = "<request><Index>-1</Index><Phones><Phone>%s</Phone></Phones><Sca/><Content>%s</Content><Length>%d</Length><Reserved>1</Reserved><Date>$TIME</Date></request>" % ( phone, msg, len(msg) )
    r = session.post( "http://%s/api/sms/send-sms" % ip, data=data, headers=headers )
    print "send-sms", r.headers, r.content
    

    【讨论】:

      【解决方案2】:

      虽然 Peter 解释得非常好,但我喜欢使用单个脚本,而且我在 OpenWrt 路由器而不是 Debian 上使用它。

      所以这是我发送短信的版本:

      #!/bin/sh
      
      RESPONSE=`curl -s -X GET http://192.168.8.1/api/webserver/SesTokInfo`
      COOKIE=`echo "$RESPONSE"| grep SessionID=| cut -b 10-147`
      TOKEN=`echo "$RESPONSE"| grep TokInfo| cut -b 10-41`
      NUMBER=$1
      SMS=$2
      DATA="<?xml version='1.0' encoding='UTF-8'?><request><Index>-1</Index><Phones><Phone>$NUMBER</Phone></Phones><Sca></Sca><Content>$SMS</Content><Length>11</Length><Reserved>1</Reserved><Date>-1</Date></request>"
      
      curl -v http://192.168.8.1/api/sms/send-sms \
       -H "Cookie: $COOKIE" -H "__RequestVerificationToken: $TOKEN" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
       --data $DATA
      

      这里是读取最后三个短信的脚本:

      #!/bin/sh
      
      RESPONSE=`curl -s -X GET http://192.168.8.1/api/webserver/SesTokInfo`
      COOKIE=`echo "$RESPONSE"| grep SessionID=| cut -b 10-147`
      TOKEN=`echo "$RESPONSE"| grep TokInfo| cut -b 10-41`
      DATA="<request><PageIndex>1</PageIndex><ReadCount>3</ReadCount><BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>1</UnreadPreferred></request>"
      
      curl -b $COOKIE -c $COOKIE -H "X-Requested-With: XMLHttpRequest" --data "$DATA" http://192.168.8.1/api/sms/sms-list --header "__RequestVerificationToken: $TOKEN" --header "Content-Type:text/xml"
      

      【讨论】:

        【解决方案3】:

        需要三个步骤:

        1. 获取会话 ID
        2. 获取令牌
        3. 发送/接收短信

        第 1 步 - 获取会话 ID

        为了获取会话 ID,我在自己的 shell 脚本中使用以下命令:

        #!/bin/bash
        
        curl -b session.txt -c session.txt http://192.168.8.1/html/index.html > /dev/null 2>&1
        

        第 2 步 - 获取令牌

        为了获取令牌,我使用以下命令,也在自己的 shell 脚本中:

        #!/bin/bash
        
        TOKEN=$(curl -s -b session.txt -c session.txt http://192.168.8.1/html/smsinbox.html)
        TOKEN=$(echo $TOKEN | cut -d'"' -f 10)
        
        echo $TOKEN > token.txt
        

        第 3 步 A 部分 - 发送短信

        最后是第三个用于发送短信的 shell 脚本,它还调用了另外两个脚本:

        #!/bin/bash
        
        NUMBER=$1
        MESSAGE=$2
        
        ./session.sh
        ./token.sh
        
        LENGTH=${#MESSAGE}
        TIME=$(date +"%Y-%m-%d %T")
        TOKEN=$(<token.txt)
        
        SMS="<request><Index>-1</Index><Phones><Phone>$NUMBER</Phone></Phones><Sca/><Content>$MESSAGE</Content><Length>$LENGTH</Length><Reserved>1</Reserved><Date>$TIME</Date></request>"
        
        echo $SMS
        
        curl -v -b session.txt -c session.txt -H "X-Requested-With: XMLHttpRequest" --data "$SMS" http://192.168.8.1/api/sms/send-sms --header "__RequestVerificationToken: $TOKEN" --header "Content-Type:text/xml"
        

        用法是:

        command phonenumber "text"
        

        第 3 步 B 部分 - 接收短信

        为了接收最后一条未读短信(或者,如果不可用,则为最后一条已读短信),我使用以下脚本:

        #!/bin/bash
        
        ./session.sh
        ./token.sh
        
        TOKEN=$(<token.txt)
        
        DATA="<request><PageIndex>1</PageIndex><ReadCount>1</ReadCount><BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>1</UnreadPreferred></request>"
        
        curl -b session.txt -c session.txt -H "X-Requested-With: XMLHttpRequest" --data "$DATA" http://192.168.8.1/api/sms/sms-list --header "__RequestVerificationToken: $TOKEN" --header "Content-Type:text/xml"
        

        这可能不是很好的编码,但它有效。

        【讨论】:

        • 兄弟!你真是天才!它像沙姆一样工作!你救了我的一天!!!非常感谢!你知道如何发送非英文文本吗?
        猜你喜欢
        • 2020-10-25
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        • 2011-01-10
        • 1970-01-01
        • 2017-04-22
        • 2019-02-06
        • 2020-07-29
        相关资源
        最近更新 更多