python实现发送和获取手机短信验证码

884次阅读  |  发布于5年以前

首先为大家分享python实现发送手机短信验证码后台方法,供大家参考,具体内容如下

1、生成4位数字验证码


    def createPhoneCode(session): 
      chars=['0','1','2','3','4','5','6','7','8','9'] 
      x = random.choice(chars),random.choice(chars),random.choice(chars),random.choice(chars) 
      verifyCode = "".join(x) 
      session["phoneVerifyCode"] = {"time":int(time.time()), "code":verifyCode} 
      return verifyCode 

2、发送给外部短信接口(post方式)


    def sendTelMsg(msg, phoneID): 
      SendTelMsgUrl="http://www.810086.com.cn/jk.aspx" 
      params = {"zh":"china", "mm":"china@10086",  
           "hm":phoneID,"nr":msg,"sms_type":88} 
      postData=urllib.urlencode(params) 
      req = urllib2.Request(SendTelMsgUrl, postData) 
      req.add_header('Content-Type', "application/x-www-form-urlencoded") 
      respone = urllib2.urlopen(req) 
      res = respone.read() 
      return res 

其中session参数是django urls.py 后台方法 以request.session传入

3、前端js


    $("button[name=getVerifyBt]").bind("click", function(){ 
      var self = this; 
      var userPhoneEl = $("input[name=phoneNum]"); 
      var userPhone = $.trim(userPhoneEl.val()); 
      if (userPhone == ""){ 
        alert("请填写号码!"); 
        return; 
      } 
      $.get("/getPhoneVerifyCode/"+userPhone + "/") 
      .success(function(msg){ 
        console.info(msg); 
        var ddEl = $(self).siblings("dd.showTag"); 
        if(msg == "ok"){ 
          ddEl.find("span").hide(); 
          ddEl.find("span[name=success]").show(); 
        }else{ 
          ddEl.find("span").hide(); 
          ddEl.find("span[name=error]").show();           
        } 
      }) 
      .error(function(msg){ 
        console.info(msg); 
      }); 
      var step = 60; 
      $(this).attr("disabled", true);  
      $(this).html("重新发送"+step); 
      var interThread = setInterval(function(){ 
        step-=1; 
        $(self).html("重新发送"+step); 
        if(step <=0){ 
          $(self).removeAttr("disabled"); 
          $(self).html("获取验证码"); 
          clearInterval(interThread); 
        } 
      }, 1000); 


    }); 

下面就为大家介绍python解决接口测试获取手机验证码问题的方法

最近在做接口测试的时候遇到一个问题,就是有个很重要的接口要用到手机短信验证码,而其他接口都依赖于这个验证码,如果没有短信验证码就不能进行下面接口的测试,所以为了定时的验证线上的接口是否正常,而且又不修改代码,所以就想到以下解决方案,如果大家有了更好方案可以一起交流分享。

Android在收到短信后会发送一个Action为android.provider.Telephony.SMS_RECEIVED的广播,所以我们只需要写个类继承BroadcastReceiver就可以很容易地监听到短信。


    package com.example.getsms;


    import android.content.BroadcastReceiver;
    import android.content.ContentResolver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.telephony.SmsMessage;
    import android.text.TextUtils;
    import android.util.Log;


    public class SmsInterceptReceiver extends BroadcastReceiver {


    private final String TAG = "SmsRec";

     private static final String SMS_EXTRA_NAME ="pdus";

     @Override
     public void onReceive(Context context, Intent intent) {
     // TODO Auto-generated method stub
     String message = "";

     Log.e(TAG, "free message " );

        Bundle extras = intent.getExtras();
        if ( extras != null ) {
          try {
          Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME );
            ContentResolver contentResolver = context.getContentResolver();

            Log.e(TAG, "free message " );
            for ( int i = 0; i < smsExtra.length; ++i ) {
              SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[i]);

              String body = sms.getMessageBody().toString();
              message += body;
            }


            Log.e(TAG, "free message : " + message);
          } catch (Exception e) {
          // TODO: handle exception
          Log.e(TAG, e.getMessage());
          }
        } 

     }


    }

AndroidManifest.xml里注册一下接收器:


     <receiver android:name=".SmsInterceptReceiver">
         <intent-filter>
         <action android:name="android.provider.Telephony.SMS_RECEIVED" />
         </intent-filter>
        </receiver>

添加权限:


    <uses-permission android:name="android.permission.RECEIVE_SMS"/>

python 代码,主要通过adb log来获取apk包所截取的短信信息,然后进行分析后既可使用。


    __author__ = 'guozhenhua'
    #coding=utf-8
    import urllib2
    import os,time



    #解析短信验证码
    os.system("adb logcat -c")
    cmd="adb logcat -d |findstr E/SmsRec"
    #time.sleep(30);
    while(1):
      smscode= os.popen(cmd).read()
      #print smscode
      if (smscode!=""):
        smscode=smscode.split("验证码:")[1].split(",")[0]
        break;


    print "验证码是:"+smscode

以上就是本文的全部内容,内容很丰富,但是也存在一些不足,希望大家谅解,共同学习进步。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8