python实现发送和获取手机短信验证码
首先为大家分享python实现发送手机短信验证码后台方法,供大家参考,具体内容如下
1、生成4位数字验证码
defcreatePhoneCode(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} returnverifyCode
2、发送给外部短信接口(post方式)
defsendTelMsg(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() returnres
其中session参数是djangourls.py后台方法以request.session传入
3、前端js
$("button[name=getVerifyBt]").bind("click",function(){ varself=this; varuserPhoneEl=$("input[name=phoneNum]"); varuserPhone=$.trim(userPhoneEl.val()); if(userPhone==""){ alert("请填写号码!"); return; } $.get("/getPhoneVerifyCode/"+userPhone+"/") .success(function(msg){ console.info(msg); varddEl=$(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); }); varstep=60; $(this).attr("disabled",true); $(this).html("重新发送"+step); varinterThread=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就可以很容易地监听到短信。
packagecom.example.getsms; importandroid.content.BroadcastReceiver; importandroid.content.ContentResolver; importandroid.content.Context; importandroid.content.Intent; importandroid.os.Bundle; importandroid.telephony.SmsMessage; importandroid.text.TextUtils; importandroid.util.Log; publicclassSmsInterceptReceiverextendsBroadcastReceiver{ privatefinalStringTAG="SmsRec"; privatestaticfinalStringSMS_EXTRA_NAME="pdus"; @Override publicvoidonReceive(Contextcontext,Intentintent){ //TODOAuto-generatedmethodstub Stringmessage=""; Log.e(TAG,"freemessage"); Bundleextras=intent.getExtras(); if(extras!=null){ try{ Object[]smsExtra=(Object[])extras.get(SMS_EXTRA_NAME); ContentResolvercontentResolver=context.getContentResolver(); Log.e(TAG,"freemessage"); for(inti=0;i<smsExtra.length;++i){ SmsMessagesms=SmsMessage.createFromPdu((byte[])smsExtra[i]); Stringbody=sms.getMessageBody().toString(); message+=body; } Log.e(TAG,"freemessage:"+message); }catch(Exceptione){ //TODO:handleexception Log.e(TAG,e.getMessage()); } } } }
AndroidManifest.xml里注册一下接收器:
<receiverandroid:name=".SmsInterceptReceiver"> <intent-filter> <actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>
添加权限:
<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>
python代码,主要通过adblog来获取apk包所截取的短信信息,然后进行分析后既可使用。
__author__='guozhenhua' #coding=utf-8 importurllib2 importos,time #解析短信验证码 os.system("adblogcat-c") cmd="adblogcat-d|findstrE/SmsRec" #time.sleep(30); while(1): smscode=os.popen(cmd).read() #printsmscode if(smscode!=""): smscode=smscode.split("验证码:")[1].split(",")[0] break; print"验证码是:"+smscode
以上就是本文的全部内容,内容很丰富,但是也存在一些不足,希望大家谅解,共同学习进步。