华为海凌科(E3372)网页API删除短信返回错误125003



>我正在尝试使用 API 读取/发送做短信的事情是可以的,但是当涉及到删除部分时,它总是返回错误125005,我认为这与会话和令牌有关。

互联网上的信息非常有限 关于如何使用 API 的示例。

下面是脚本:

#!/bin/bash 
MODEM_IP="192.168.9.1" 
curl -s -X GET "http://$MODEM_IP/api/webserver/SesTokInfo" > ses_tok.xml
COOKIE=`grep "SessionID=""ses_tok.xml | cut -b 10-147`
TOKEN=`grep "TokInfo" ses_tok.xml | cut -b 10-41` 
curl -s -X POST "http://$MODEM_IP/api/sms/sms-list" -H "Cookie: $COOKIE" -H "__RequestVerificationToken: $TOKEN" -H "Content-Type: text/xml" -d "<request><PageIndex>1</PageIndex><ReadCount>20</ReadCount><BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>1</UnreadPreferred></request>" > modem_status.xml
#cat modem_status.xml
#read index
readarray -t array_index <<< "$(xmlstarlet sel -t -m "//Index" -v . -n modem_status.xml)"
rm -f result_status.xml
touch result_status.xml
for ((i=0; i<${#array_index[@]}; i++ ))
do
index[$i]=$(printf ${array_index[$i]} | tr -d 'nr ')
#printf "${index[$i]} "
printf "n${index[$i]}n" >> result_status.xml
curl -s -X POST "http://$MODEM_IP/api/sms/delete-sms" -H "Cookie: $COOKIE" -H "__RequestVerificationToken: $TOKEN" -H "Content-Type: text/xml" -d "<?xml version="1.0" encoding="UTF-8"?><request><Index>${index[$i]}</Index></request>" >> result_status.xml
done
cat result_status.xml

错误:

<?xml version="1.0" encoding="UTF-8"?>
<error>
<code>125003</code>
<message></message>
</error>

也许,我错过了一些我以前没有注意到的东西。

我遇到了同样的错误,在您要求删除短信的情况下,我已经要求重新启动。调制解调器应具有基于令牌的验证连接,保存在cookie中以执行任何操作。

我使用了 3 个步骤。

1( 首先是连接到 e3372。

<?xml version="1.0" encoding="UTF-8"?><request><dataswitch>1</dataswitch></request>

通过/api/dialup/mobile-dataswitch路径。

2(第二是通过/api/webserver/SesTokInfo路径获取令牌,并保存在cookie中。 附上蟒蛇示例。

def _getTokens(self):
"""Get access tokens"""
try:
xml = self._getXml("/api/webserver/SesTokInfo")
except (URLError, socket.timeout):
return ("", "")
else:
return (xml.findtext("SesInfo", ""), xml.findtext("TokInfo", ""))
def _updateTokens(self):
session, postToken = self._getTokens()
self._opener.addheaders = [("__RequestVerificationToken", postToken),
("Cookie", session)]

3( 重新启动调制解调器。

<?xml version="1.0" encoding="UTF-8"?><request><Control>1</Control></request>

通过/api/device/controlpath。

也许太晚了,但我遇到了同样的问题,也许这也有助于其他用户寻找它。

就我而言,令牌/cookie 在删除命令之前已经过期。 我不认为这是一个涉及的时间组件,但更像是组合仅对一个 API 调用有效。

我在删除命令之前得到了一个新的令牌/cookie,现在它对我有用。希望这有帮助。

干杯 克里斯

由于这是Huawei 125003的最高结果,因此我将在遇到此错误时添加我的发现。 在我有__RequestVerificationToken的B315上只能使用一次。 每个 POST 请求都应该有一个响应标头 __RequestVerificationToken您可以只获取此值并将其用于下一个请求。请注意,对/api/user/login的响应将返回许多您可以使用的令牌,它们由哈希 # 符号分隔。

同时保持您的cookie,从/api/webserver/SesTokInfo保存的SesInfo将在您成功登录后更改。

截至 2020 年左右,不确定 python 是否完全相同,但 curl 和 .net 框架需要将SessionID显示为 cookie 而不是标头中的 cookie。如下所示,请注意 curl 中的-b选项:

cmd_output=$(curl -s -X GET "http://192.168.8.1/api/webserver/SesTokInfo")
COOKIE=$(echo $cmd_output | cut -b 58-185)
TOKEN=$(echo $cmd_output | cut -b 205-236)
curl -s -X POST "http://192.168.8.1/api/sms/sms-list" **-b "SessionID=$COOKIE"** -H "__RequestVerificationToken: $TOKEN" -H "Content-Type: text/xml" -d "<request><PageIndex>1</PageIndex><ReadCount>10</ReadCount><BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>1</UnreadPreferred></request>"

最新更新