首先为大家分享python实现发送手机短信验证码后台方法,供大家参考,具体内容如下
1、生成4位数字验证码
1
2
3
4
5
6
|
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方式)
1
2
3
4
5
6
7
8
9
10
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
$( "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就可以很容易地监听到短信。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
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里注册一下接收器:
1
2
3
4
5
|
<receiver android:name= ".SmsInterceptReceiver" > <intent-filter> <action android:name= "android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> |
添加权限:
1
|
<uses-permission android:name= "android.permission.RECEIVE_SMS" /> |
python 代码,主要通过adb log来获取apk包所截取的短信信息,然后进行分析后既可使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
__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 |
以上就是本文的全部内容,内容很丰富,但是也存在一些不足,希望大家谅解,共同学习进步。