分享

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

 powerbaby 2016-01-28
这篇文章主要介绍了python实现发送和获取手机短信验证码的相关资料,讲解了python如何解决接口测试获取手机验证码问题,感兴趣的小伙伴们可以参考一下

首先为大家分享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./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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多