这是我的第一个问题,而且我不是母语人士,请不要对我施加压力:)
我正在尝试使用api读取/发送sms消息,但可以删除部分,但总是返回错误125005,我认为这与会话和令牌有关。
关于互联网的信息非常有限 关于如何使用api的示例。
这是scrpt:
#!/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 '\n\r ')
#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>
也许,我错过了以前没有注意到的东西。
TIA
答案 0 :(得分:0)
也许为时已晚,但我遇到了同样的问题,也许这也有助于其他用户寻找它。
在我的情况下,令牌/ cookie已在delete命令之前过期。 我认为这不涉及时间因素,但更像是该组合仅对一个API调用有效。
我在delete命令之前获得了一个新的令牌/ cookie,现在它对我有用。希望这会有所帮助。
欢呼 克里斯
答案 1 :(得分:0)
我遇到了同样的错误,在您要求删除短信的情况下,我要求重新启动。调制解调器应该已经基于令牌验证了连接,并保存在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中。 附有python示例。
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 / control 路径。
答案 2 :(得分:0)
由于这是Huawei 125003
的最高结果,因此我会在遇到此错误时添加发现。
在我拥有__RequestVerificationToken的B315上,只能使用一次。
每个POST请求都应具有__RequestVerificationToken的响应标头,您可以仅使用此值并将其用于下一个请求。请注意,对 / api / user / login 的响应将返回您可以使用的许多令牌,这些令牌之间用井号#符号分隔。
同样要保留您的cookie,一旦成功登录,从 / api / webserver / SesTokInfo 保存的SesInfo就会更改。