网络编程
位置:首页>> 网络编程>> Python编程>> python实现发送和获取手机短信验证码

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

作者:lijiao  发布时间:2023-08-09 08:02:26 

标签:python,短信,验证码

首先为大家分享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
0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com