python實現發(fā)送和獲取手機短信驗證碼
首先為大家分享python實現發(fā)送手機短信驗證碼后臺方法,供大家參考,具體內容如下
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、發(fā)送給外部短信接口(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("請?zhí)顚懱柎a!"); 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("重新發(fā)送"+step); var interThread = setInterval(function(){ step-=1; $(self).html("重新發(fā)送"+step); if(step <=0){ $(self).removeAttr("disabled"); $(self).html("獲取驗證碼"); clearInterval(interThread); } }, 1000); });
下面就為大家介紹python解決接口測試獲取手機驗證碼問題的方法:
最近在做接口測試的時候遇到一個問題,就是有個很重要的接口要用到手機短信驗證碼,而其他接口都依賴于這個驗證碼,如果沒有短信驗證碼就不能進行下面接口的測試,所以為了定時的驗證線上的接口是否正常,而且又不修改代碼,所以就想到以下解決方案,如果大家有了更好方案可以一起交流分享。
Android在收到短信后會發(fā)送一個Action為android.provider.Telephony.SMS_RECEIVED的廣播,所以我們只需要寫個類繼承BroadcastReceiver就可以很容易地監(jiān)聽到短信。
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
以上就是本文的全部內容,內容很豐富,但是也存在一些不足,希望大家諒解,共同學習進步。
相關文章
python+opencv+selenium自動化登錄郵箱并解決滑動驗證的問題
本文主要講解基于python+opencv+selenium自動化登錄郵箱并解決滑動驗證的問題,在這大家需要注意頁面元素定位及文本框和驗證碼的frame嵌套問題,感興趣的朋友一起看看吧2021-07-07使用Python對mongo數據庫中字符串型正負數值比較大小
這篇文章主要介紹了使用Python對mongo數據庫中字符串型正負數值比較大小,2023-04-04