美文网首页
记录请求手机验证码的一些波折

记录请求手机验证码的一些波折

作者: NateLam | 来源:发表于2017-07-09 20:37 被阅读5次

我们公司申请了一个请求发送手机短信的接口, 为了请求验证码的需求, 但是验证码这6位数需要移动端这边生成, 而且此接口GET/POST皆可, 采取的是拼接网址的形式, 参数字典填空即可. 最后返回的数据格式竟是纯文本.

感谢http://www.cnblogs.com/JM110/p/5547169.html
http://blog.csdn.net/cuibo1123/article/details/40938225

其中一个参数是将申请下来的用户id和密码拼接在一起, 然后经过MD532位小写加密, 再作为参数内容.

(CC_LONG)这个修饰不加会有黄色报警

#pragma mark - md5 32位小写加密
+ (NSString *)md5SecureIn32LowCased:(NSString *)str{
const char *cStr = [str UTF8String];
unsigned char result[16];
CC_MD5(cStr, (CC_LONG)strlen(cStr), result); // This is the md5 call
return [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",result[0], result[1], result[2], result[3],result[4], result[5], result[6], result[7],result[8], result[9], result[10], result[11],result[12], result[13], result[14], result[15]];
}

我使用AFN3.x进行的网络请求, 请求之前, 要对AFHTTPSessionManager进行这些设置

manager.responseSerializer = [AFHTTPResponseSerializer serializer];
 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects: @"text/plain",  nil];

而且还需要对拼接后的url字符串进行这一步操作, 不然直接崩在afn里面

urlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

这个接口请求成功后, 接口文档说是返回纯文本格式, 但打印出来是类似于<1233 1231 1231>的东西, 内容我是拿脸敲的. 我们知道这是NSData, 需要转成字符串才看得懂.

首先我们对这个data进行过滤, 过滤掉非utf-8的东西, 再进行转化.

//注意:如果是三字节utf-8,第二字节错误,则先替换第一字节内容(认为此字节误码为三字节utf8的头),然后判断剩下的两个字节是否非法;
+ (NSData *)replaceNoUtf8:(NSData *)data{
char aa[] = {'A','A','A','A','A','A'};                      //utf8最多6个字符,当前方法未使用
NSMutableData *md = [NSMutableData dataWithData:data];
int loc = 0;
while(loc < [md length])
{
    char buffer;
    [md getBytes:&buffer range:NSMakeRange(loc, 1)];
    if((buffer & 0x80) == 0)
    {
        loc++;
        continue;
    }
    else if((buffer & 0xE0) == 0xC0)
    {
        loc++;
        [md getBytes:&buffer range:NSMakeRange(loc, 1)];
        if((buffer & 0xC0) == 0x80)
        {
            loc++;
            continue;
        }
        loc--;
        //非法字符,将这个字符(一个byte)替换为A
        [md replaceBytesInRange:NSMakeRange(loc, 1) withBytes:aa length:1];
        loc++;
        continue;
    }
    else if((buffer & 0xF0) == 0xE0)
    {
        loc++;
        [md getBytes:&buffer range:NSMakeRange(loc, 1)];
        if((buffer & 0xC0) == 0x80)
        {
            loc++;
            [md getBytes:&buffer range:NSMakeRange(loc, 1)];
            if((buffer & 0xC0) == 0x80)
            {
                loc++;
                continue;
            }
            loc--;
        }
        loc--;
        //非法字符,将这个字符(一个byte)替换为A
        [md replaceBytesInRange:NSMakeRange(loc, 1) withBytes:aa length:1];
        loc++;
        continue;
    }
    else
    {
        //非法字符,将这个字符(一个byte)替换为A
        [md replaceBytesInRange:NSMakeRange(loc, 1) withBytes:aa length:1];
        loc++;
        continue;
    }
}

return md;
}

最后将过滤完的data转成utf-8形式的字符串, 就终于是我们人能看懂的文字了

NSString *str = [[NSString alloc] initWithData:data1 encoding:NSUTF8StringEncoding];

相关文章

  • 记录请求手机验证码的一些波折

    我们公司申请了一个请求发送手机短信的接口, 为了请求验证码的需求, 但是验证码这6位数需要移动端这边生成, 而且...

  • React-Native中使用验证码倒计时的按钮

    开发过程中有获取手机验证码的场景,这时候有这样的要求:1,点击“获取验证码”的按钮,发起获取验证码的网络请求,同时...

  • 关于session存储短信验证码的问题

    给安卓写短信验证接口,用session存储手机验证码,在本人电脑用url请求收到的验证码去注册,是可以成功的,然后...

  • 发送验证码找回密码功能

    1、定义前台获取验证码的html模板 2、当点击获取验证码的按钮,则发送手机号到后台 3、前台发送请求到后台获取验...

  • C#发送短信验证码

    业务: 手机端点击发送验证码,请求发送到java服务器端,由java调用榛子云短信接口,生成验证码并发送。 ...

  • 获取短信验证码接口

    接口描述 获取短信验证码接口, 前端控制只有图片验证码通过才可以调用 请求方式只接受【POST】请求 请求参数说明...

  • 注册

    图形验证码 方法名称 请求数据 返回参数 短信验证码 方法名称 请求数据 返回参数

  • 短信验证码到底有什么用,你知道吗?

    现如今我们在注册、验证、修改等一些账号时候,一般都会收到一些手机验证码,通过手机验证码短信的内容来验证用户的身份,...

  • Android获取验证码倒计时

    在一些应用的用户登录,或者注册时候,会通过手机,和动态验证码的方式进行验证,并且为了减少对服务器发送信息的请求,会...

  • Django项目用户注册功能(三)

    一、获取短信验证码 1.业务流程分析 校验手机号码 校验图形验证码 校验有效时间内有送记录 生成短信验证码 发送短...

网友评论

      本文标题:记录请求手机验证码的一些波折

      本文链接:https://www.haomeiwen.com/subject/godehxtx.html