@@ -16,6 +16,8 @@ class GeetestLib(object):
1616 FN_VALIDATE = "geetest_validate"
1717 FN_SECCODE = "geetest_seccode"
1818
19+ GT_STATUS_SESSION_KEY = "gt_server_status"
20+
1921 SUCCESS_RES = "success"
2022 FAIL_RES = "fail"
2123
@@ -24,9 +26,9 @@ class GeetestLib(object):
2426 VALIDATE_HANDLER = "/validate.php"
2527
2628
27- def __init__ (self , id , key ):
28- self .private_key = key #私钥
29- self .captcha_id = id #公钥
29+ def __init__ (self , captcha_id , private_key ):
30+ self .private_key = private_key #私钥
31+ self .captcha_id = captcha_id #公钥
3032 self .sdk_version = VERSION #SDK版本
3133
3234 def pre_process (self ):
@@ -36,17 +38,18 @@ def pre_process(self):
3638 :return Boolean:
3739 """
3840 status , challenge = self ._register ()
41+ return status , self ._make_response_format (status , challenge )
3942
4043 def _register (self ):
41- challenge = self ._register_challenge ()
44+ challenge = self ._register_challenge ()
4245 if len (challenge ) == 32 :
4346 return 1 , challenge
4447 else :
4548 return 0 , self ._make_fail_challenge ()
4649
4750 def _make_fail_challenge (self ):
48- rnd1 = int ( round ( random .random () * 100 ) )
49- rnd2 = int ( round ( random .random () * 100 ) )
51+ rnd1 = random .randint ( 0 , 99 )
52+ rnd2 = random .randint ( 0 , 99 )
5053 md5_str1 = self .md5_encode (str (rnd1 ))
5154 md5_str2 = self .md5_encode (str (rnd2 ))
5255 challenge = md5_str1 + md5_str2 [0 :2 ]
@@ -55,7 +58,7 @@ def _make_fail_challenge(self):
5558 def _make_response_format (self , success = 1 , challenge = None ):
5659 if not challenge :
5760 challenge = self ._make_fail_challenge ()
58- string_format = json .dumps ({'success' : success , 'gt' :self .captcha_ID ,'challenge' : challenge })
61+ string_format = json .dumps ({'success' : success , 'gt' :self .captcha_id ,'challenge' : challenge })
5962 return string_format
6063
6164 def _register_challenge (self ):
@@ -67,7 +70,7 @@ def _register_challenge(self):
6770 res_string = ""
6871 return res_string
6972
70- def post_validate (self , status , challenge , validate , seccode ):
73+ def validate (self , status , challenge , validate , seccode ):
7174 """
7275 validate二次验证.
7376
@@ -131,52 +134,40 @@ def failback_validate(self, challenge, validate, seccode):
131134 :param seccode:
132135 :return result:
133136 """
134- if not self .request_is_legal (challenge , validate , seccode ):
135- return self .fail_res
136- validate_str = "" . join ( validate .split ('_' ) )
137+ if not self ._check_para (challenge , validate , seccode ):
138+ return self .FAIL_RES
139+ validate_str = validate .split ('_' )
137140 encode_ans = validate_str [0 ]
138141 encode_fbii = validate_str [1 ] #_fbii : Full Bg Img Index
139142 encode_igi = validate_str [2 ]
140- decode_ans = self .decode_response (self .challenge , encode_ans )
141- decode_fbii = self .decode_response (self .challenge , encode_fbii )
142- decode_igi = self .decode_response (self .challenge , encode_igi ) #_igi : Img Grp Index
143- validate_result = self .validate_fail_image (decode_ans , decode_fbii , decode_igi )
144- if not validate_result == self .fail_res :
145- rand1 = self .random_num ()
146- md5Str = self .md5_encode (rand1 + "" )
147- self .challenge = md5Str
143+ decode_ans = self .decode_response (challenge , encode_ans )
144+ decode_fbii = self .decode_response (challenge , encode_fbii )
145+ decode_igi = self .decode_response (challenge , encode_igi ) #_igi : Img Grp Index
146+ validate_result = self ._validate_fail_image (decode_ans , decode_fbii , decode_igi )
148147 return validate_result
149148
150149 def _check_para (self , challenge , validate , seccode ):
151150 return bool (challenge .strip ()) and bool (validate .strip ()) and bool (seccode .strip ())
152151
153- def validate_fail_image (self , ans , full_bg_index , img_grp_index ):
154- """
155- failback模式下,简单判断轨迹是否通过
156-
157- :param ans:
158- :param full_bg_index:
159- :param img_grp_index:
160- :return result:
161- """
152+ def _validate_fail_image (self , ans , full_bg_index , img_grp_index ):
162153 thread = 3
163154 full_bg_name = str (self .md5_encode (str (full_bg_index )))[0 :10 ]
164- bg_name = str (self .md5_encode (str (img_grp_index )))[0 : 10 ]
155+ bg_name = str (self .md5_encode (str (img_grp_index )))[10 : 20 ]
165156 answer_decode = ""
166157 for i in range (0 ,9 ):
167158 if i % 2 == 0 :
168159 answer_decode += full_bg_name [i ]
169160 elif i % 2 == 1 :
170161 answer_decode += bg_name [i ]
171- x_decode = answer_decode [4 ]
172- x_int = string . atoi (x_decode , 16 )
162+ x_decode = answer_decode [4 : ]
163+ x_int = int (x_decode , 16 )
173164 result = x_int % 200
174165 if result < 40 :
175166 result = 40
176167 if abs (ans - result ) < thread :
177- return self .success_res
168+ return self .SUCCESS_RES
178169 else :
179- return self .fail_res
170+ return self .FAIL_RES
180171
181172 def md5_encode (self , values ):
182173 """
@@ -196,16 +187,15 @@ def decode_rand_base(self, challenge):
196187 :param challenge:
197188 :return decode_result:
198189 """
199- str_base = challenge [32 :34 ]
190+ str_base = challenge [32 :]
200191 i = 0
201192 temp_array = []
202- while i < len (str_base ):
193+ for i in xrange ( len (str_base ) ):
203194 temp_char = str_base [i ]
204- temp_Ascii = ord (temp_char )
205- result = temp_Ascii - 87 if temp_Ascii > 57 else temp_Ascii - 48
195+ temp_ascii = ord (temp_char )
196+ result = temp_ascii - 87 if temp_ascii > 57 else temp_ascii - 48
206197 temp_array .append (result )
207- i += 1
208- decode_res = temp_array [1 ]* 36 + temp_array [1 ]
198+ decode_res = temp_array [0 ]* 36 + temp_array [1 ]
209199 return decode_res
210200
211201 def decode_response (self , challenge , userresponse ):
@@ -219,20 +209,21 @@ def decode_response(self, challenge, userresponse):
219209 if len (userresponse ) > 100 :
220210 return 0
221211 shuzi = (1 , 2 , 5 , 10 , 50 )
222- chongfu = []
212+ chongfu = set ()
223213 key = {}
224214 count = 0
225215 for i in challenge :
226216 if i in chongfu :
227217 continue
228218 else :
229219 value = shuzi [count % 5 ]
230- chongfu .append (i )
220+ chongfu .add (i )
231221 count += 1
232222 key .update ({i : value })
233223 res = 0
234224 for i in userresponse :
235225 res += key .get (i , 0 )
226+ res = res - self .decode_rand_base (challenge )
236227 return res
237228
238229 def random_num ():
@@ -242,11 +233,4 @@ def random_num():
242233 :return Float:
243234 """
244235 rand_num = random .random ()* 100
245- return rand_num
246-
247-
248-
249-
250-
251-
252-
236+ return rand_num
0 commit comments