首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >华为api短信文档

华为api短信文档
EN

Stack Overflow用户
提问于 2014-03-21 22:46:16
回答 3查看 7.9K关注 0票数 3

有没有华为短信API文档?(api/sms/sms-list)

我需要知道如何使用此接口获取短信列表:

它必须是这样的:

代码语言:javascript
复制
<request>
<PageIndex>1</PageIndex>
<ReadCount>20</ReadCount>
<BoxType>1</BoxType>
<SortType>0</SortType>
<Ascending>0</Ascending>
<UnreadPreferred>0</UnreadPreferred>
</request>

但我只得到了一个错误代码100003作为答案。我不明白这是什么意思。

谢谢你,米歇尔

EN

回答 3

Stack Overflow用户

发布于 2015-02-08 10:45:07

我已经用Python在华为E5221上做了这件事。您收到的错误是因为您未通过身份验证,需要先登录。则可以检索该列表。

还要注意,所有的API请求都是POST请求,而不是GET请求。

登录方法:

代码语言:javascript
复制
def LoginToSMSGateway(sms_gateway_ip, username, password):
api_url = '/api/user/login'
post_data = '<request><Username>'+username+'</Username><Password>'+ base64.b64encode(password) +'</Password>'

r = requests.post(url='http://' + sms_gateway_ip + api_url, data=post_data)
if r.status_code == 200:
    result = False
    root = ET.fromstring(r.text)

    for results in root.iter('response'):
        if results.text == 'OK':
            result = True

    return result
else:
    return False

检索SMS列表的方法(该方法将把XML结果转换为SMS的Python列表):

代码语言:javascript
复制
def GetSMSList(sms_gateway_ip):
class SMS:
    Opened = False
    Message = ''


api_url = '/api/sms/sms-list'
post_data = '<?xml version="1.0" encoding="UTF-8"?><request><PageIndex>1</PageIndex><ReadCount>20</ReadCount><BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>0</UnreadPreferred></request>'

headers = {'Referer': 'http://' + sms_gateway_ip + '/html/smsinbox.html'}

r = requests.post(url='http://' + sms_gateway_ip + api_url, data=post_data, headers=headers)

root = ET.fromstring(r.text)

resultsList = list()
for messages in root.iter('Messages'):
    for message in messages:
        sms = SMS()
        sms.Message = message.find('Content').text
        sms.Opened = False if message.find('SmsType').text == '1' else True
        resultsList.append(sms)

return resultsList

要使用它( IP和凭证是默认值,需要进行保护):

代码语言:javascript
复制
if LoginToSMSGateway('192.168.1.1', 'admin', 'admin'):
print 'Logged in.'

smsList = GetSMSList('192.168.1.1')
for sms in smsList:
    print sms.Message
票数 2
EN

Stack Overflow用户

发布于 2017-02-18 21:02:30

自从这个主题发布后,我认为API发生了一些变化。

要获取短信列表,不需要登录,但需要获取sessionID和相应的令牌。您可以使用该方法来获取它们。

代码语言:javascript
复制
def GetTokenAndSessionID(sms_gateway_ip):
    url = '/html/smsinbox.html'
    r = requests.get(sms_gateway_ip + url)
    Setcookie = r.headers.get('set-cookie')
    sessionID = Setcookie.split(';')[0]
    token =  re.findall(r'"([^"]*)"', r.text)[2]
    return token, sessionID

然后是获取短信列表的方法(它使用第一个方法将sessionID和Token包装在标题中)。

代码语言:javascript
复制
def GetSmsList(sms_gateway_ip):
    class SMS:
        Opened = False
        Message = ''

    url = '/api/sms/sms-list'
    token,sessionID = GetTokenAndSessionID(sms_gateway_ip)
    post_data = '<request><PageIndex>1</PageIndex><ReadCount>20</ReadCount><BoxType>2</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>0</UnreadPreferred></request>'
    headers = { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                '__RequestVerificationToken': token,
                'Cookie': sessionID
              }
    r = requests.post(sms_gateway_ip + url, data = post_data, headers=headers)

    root = ET.fromstring(r.text)
    resultsList = list()

    for messages in root.iter('Messages'):
        for message in messages :
            sms = SMS()
            sms.Message = message.find('Content').text
            sms.Opened = False if message.find('SmsType').text == '1' else True
            resultsList.append(sms)

使用时只需调用短信网关ip : 192.168.8.1即可

代码语言:javascript
复制
GetSmsList(sms_gateway_ip)
票数 1
EN

Stack Overflow用户

发布于 2018-01-20 06:56:01

下面是使用Apache HTTP客户端类的类似Java代码

代码语言:javascript
复制
CloseableHttpClient httpclient = HttpClients.createDefault();

// 1. Have apache HTTPClient manage the cookie containing the SessionID
CookieStore cookieStore = new BasicCookieStore();
HttpContext httpContext = new BasicHttpContext();
httpContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);

// 2. Extract the token
String token = "";
HttpGet hget = new HttpGet("http://192.168.8.1/html/smsinbox.html");
CloseableHttpResponse getRespo = httpclient.execute(hget, httpContext);
try {
    StatusLine statusLine = getRespo.getStatusLine();
    if (statusLine.getStatusCode() >= 300) {
        throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase());
    }
    HttpEntity entity = getRespo.getEntity();
    if (entity == null) {
        throw new ClientProtocolException("Get response contains no content");
    }
    long len = entity.getContentLength();
    StringTokenizer st = null;
    if (len != -1 && len > 250) {
        st = new StringTokenizer(EntityUtils.toString(entity).substring(0, 250), "\"");
    }
    int i = 1;
    while (st != null && st.hasMoreTokens()) {
        if (i++ == 10) {
            token = st.nextToken();
            break;
        } else {
            st.nextToken();
        }
    }
} finally {
    getRespo.close();
}
System.out.println("Token: " + token);

// 3. Get the SMS messages using the Token
HttpPost hpost = new HttpPost("http://192.168.8.1/api/sms/sms-list");

String xmlRequest = "<request><PageIndex>1</PageIndex><ReadCount>1</ReadCount><BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>1</UnreadPreferred></request>";
StringEntity reqEntity = new StringEntity(xmlRequest);
reqEntity.setContentType("text/xml");

hpost.setEntity(reqEntity);
hpost.addHeader("__RequestVerificationToken", token);

CloseableHttpResponse postRespo = httpclient.execute(hpost, httpContext);
try {
    StatusLine statusLine = postRespo.getStatusLine();
    if (statusLine.getStatusCode() >= 300) {
        throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase());
    }
    HttpEntity entity = postRespo.getEntity();
    if (entity == null) {
        throw new ClientProtocolException("Response contains no content");
    }
    System.out.println(EntityUtils.toString(entity));
    //Your further processing here. 
} finally {
    postRespo.close();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22561947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档