captcha_solver 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/lib/captcha_solver/base.rb +33 -21
 - data/lib/captcha_solver/recaptcha_v1.rb +12 -32
 - data/lib/captcha_solver/recaptcha_v2.rb +6 -25
 - metadata +1 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 04f4869b6dabc49cc2e82c1a91e50c1cadffce98dd777709951a692293887879
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 07471d70d929a512e66347278c65347dd48f7908722646a17fa17af35452134f
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f85e580b4cd6f207e8d5a32f7eb3f5f5560e242723c46c935618bfb98e507c4fa6df63e418513e81abfa1e264aeaefc3b06ad49793d744ab0abf358fa05c3fda
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: ab993f1ff6f048c4d5d50e003d0bff35e99f506723b6c68d4c7da9ebac0b9b69880c8c20c5ef19d3d1bfa8472bfa8cb00e792fb085d4027297732941f4fef693
         
     | 
    
        data/lib/captcha_solver/base.rb
    CHANGED
    
    | 
         @@ -36,7 +36,7 @@ module CaptchaSolver 
     | 
|
| 
       36 
36 
     | 
    
         
             
                  raise NotSolvedError.new(complete_response&.body)
         
     | 
| 
       37 
37 
     | 
    
         
             
                end
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                # Returns solved captcha
         
     | 
| 
      
 39 
     | 
    
         
            +
                # Returns solved captcha.
         
     | 
| 
       40 
40 
     | 
    
         
             
                def solved_captcha
         
     | 
| 
       41 
41 
     | 
    
         
             
                  return nil unless solved?
         
     | 
| 
       42 
42 
     | 
    
         
             
                  captcha_value
         
     | 
| 
         @@ -44,79 +44,91 @@ module CaptchaSolver 
     | 
|
| 
       44 
44 
     | 
    
         | 
| 
       45 
45 
     | 
    
         
             
                private
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                # Headers that have to be passed in each request. 
     | 
| 
      
 47 
     | 
    
         
            +
                # Headers that have to be passed in each request.
         
     | 
| 
       48 
48 
     | 
    
         
             
                def default_request_headers
         
     | 
| 
       49 
49 
     | 
    
         
             
                  { 'Accept' => 'application/json', 'Content-Type' => 'application/x-www-form-urlencoded' }
         
     | 
| 
       50 
50 
     | 
    
         
             
                end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                #  
     | 
| 
      
 52 
     | 
    
         
            +
                # Parameters that have to be passed in each request.
         
     | 
| 
       53 
53 
     | 
    
         
             
                def default_request_params
         
     | 
| 
       54 
54 
     | 
    
         
             
                  { key: rucaptcha_api_key, json: 1 }
         
     | 
| 
       55 
55 
     | 
    
         
             
                end
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
     | 
    
         
            -
                #  
     | 
| 
       58 
     | 
    
         
            -
                def  
     | 
| 
       59 
     | 
    
         
            -
                  raise NotImplementedError.new('# 
     | 
| 
      
 57 
     | 
    
         
            +
                # Parameters which are used in in.php request.
         
     | 
| 
      
 58 
     | 
    
         
            +
                def start_request_params
         
     | 
| 
      
 59 
     | 
    
         
            +
                  raise NotImplementedError.new('#start_request_params method must be implemented')
         
     | 
| 
       60 
60 
     | 
    
         
             
                end
         
     | 
| 
       61 
61 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
                #  
     | 
| 
      
 62 
     | 
    
         
            +
                # Makes a in.php request and saves the result in @start_response.
         
     | 
| 
       63 
63 
     | 
    
         
             
                def start
         
     | 
| 
       64 
     | 
    
         
            -
                  @start_response =  
     | 
| 
      
 64 
     | 
    
         
            +
                  @start_response = RestClient::Request.execute(
         
     | 
| 
      
 65 
     | 
    
         
            +
                    method: :post,
         
     | 
| 
      
 66 
     | 
    
         
            +
                    url: 'http://rucaptcha.com/in.php',
         
     | 
| 
      
 67 
     | 
    
         
            +
                    proxy: "http://#{proxy_address}",
         
     | 
| 
      
 68 
     | 
    
         
            +
                    headers: default_request_headers,
         
     | 
| 
      
 69 
     | 
    
         
            +
                    payload: default_request_params.merge(start_request_params)
         
     | 
| 
      
 70 
     | 
    
         
            +
                  )
         
     | 
| 
       65 
71 
     | 
    
         
             
                end
         
     | 
| 
       66 
72 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
                # Parses response from in.php request and returns rucaptcha id
         
     | 
| 
      
 73 
     | 
    
         
            +
                # Parses response from in.php request and returns rucaptcha id.
         
     | 
| 
       68 
74 
     | 
    
         
             
                def rucaptcha_id
         
     | 
| 
       69 
75 
     | 
    
         
             
                  return nil if start_response.nil?
         
     | 
| 
       70 
76 
     | 
    
         
             
                  JSON.parse(start_response.body)['request']
         
     | 
| 
       71 
77 
     | 
    
         
             
                end
         
     | 
| 
       72 
78 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                # Checks if a in.php request is successful
         
     | 
| 
      
 79 
     | 
    
         
            +
                # Checks if a in.php request is successful.
         
     | 
| 
       74 
80 
     | 
    
         
             
                def started?
         
     | 
| 
       75 
81 
     | 
    
         
             
                  return false if start_response.nil?
         
     | 
| 
       76 
82 
     | 
    
         
             
                  return false if errors_regexp.match?(start_response.body)
         
     | 
| 
       77 
83 
     | 
    
         
             
                  !rucaptcha_id.nil?
         
     | 
| 
       78 
84 
     | 
    
         
             
                end
         
     | 
| 
       79 
85 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
                #  
     | 
| 
       81 
     | 
    
         
            -
                def  
     | 
| 
       82 
     | 
    
         
            -
                   
     | 
| 
      
 86 
     | 
    
         
            +
                # Parameters which are used in res.php request.
         
     | 
| 
      
 87 
     | 
    
         
            +
                def complete_request_params
         
     | 
| 
      
 88 
     | 
    
         
            +
                  { id: rucaptcha_id, action: 'get' }
         
     | 
| 
       83 
89 
     | 
    
         
             
                end
         
     | 
| 
       84 
90 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
                #  
     | 
| 
      
 91 
     | 
    
         
            +
                # Makes a res.php request and saves the result in @complete_response.
         
     | 
| 
       86 
92 
     | 
    
         
             
                def complete
         
     | 
| 
       87 
93 
     | 
    
         
             
                  return nil unless started?
         
     | 
| 
       88 
     | 
    
         
            -
                  @complete_response =  
     | 
| 
      
 94 
     | 
    
         
            +
                  @complete_response = RestClient::Request.execute(
         
     | 
| 
      
 95 
     | 
    
         
            +
                    method: :post,
         
     | 
| 
      
 96 
     | 
    
         
            +
                    url: 'http://rucaptcha.com/res.php',
         
     | 
| 
      
 97 
     | 
    
         
            +
                    proxy: "http://#{proxy_address}",
         
     | 
| 
      
 98 
     | 
    
         
            +
                    headers: default_request_headers,
         
     | 
| 
      
 99 
     | 
    
         
            +
                    payload: default_request_params.merge(complete_request_params)
         
     | 
| 
      
 100 
     | 
    
         
            +
                  )
         
     | 
| 
       89 
101 
     | 
    
         
             
                end
         
     | 
| 
       90 
102 
     | 
    
         | 
| 
       91 
     | 
    
         
            -
                # Checks if captcha solving is failed
         
     | 
| 
      
 103 
     | 
    
         
            +
                # Checks if captcha solving is failed.
         
     | 
| 
       92 
104 
     | 
    
         
             
                def failed?
         
     | 
| 
       93 
105 
     | 
    
         
             
                  return false if complete_response.nil?
         
     | 
| 
       94 
106 
     | 
    
         
             
                  errors_regexp.match? complete_response.body
         
     | 
| 
       95 
107 
     | 
    
         
             
                end
         
     | 
| 
       96 
108 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
                # Checks if captcha is solved
         
     | 
| 
      
 109 
     | 
    
         
            +
                # Checks if captcha is solved.
         
     | 
| 
       98 
110 
     | 
    
         
             
                def solved?
         
     | 
| 
       99 
111 
     | 
    
         
             
                  return false if complete_response.nil?
         
     | 
| 
       100 
112 
     | 
    
         
             
                  return false if failed?
         
     | 
| 
       101 
113 
     | 
    
         
             
                  !not_ready_regexp.match?(complete_response.body) && !captcha_value.nil?
         
     | 
| 
       102 
114 
     | 
    
         
             
                end
         
     | 
| 
       103 
115 
     | 
    
         | 
| 
       104 
     | 
    
         
            -
                # Parses response from res.php request and returns captcha value
         
     | 
| 
      
 116 
     | 
    
         
            +
                # Parses response from res.php request and returns captcha value.
         
     | 
| 
       105 
117 
     | 
    
         
             
                def captcha_value
         
     | 
| 
       106 
118 
     | 
    
         
             
                  JSON.parse(complete_response.body)['request']
         
     | 
| 
       107 
119 
     | 
    
         
             
                end
         
     | 
| 
       108 
120 
     | 
    
         | 
| 
       109 
     | 
    
         
            -
                # The error that is returned by res.php request if captcha is not solved yet
         
     | 
| 
      
 121 
     | 
    
         
            +
                # The error that is returned by res.php request if captcha is not solved yet.
         
     | 
| 
       110 
122 
     | 
    
         
             
                def not_ready_regexp
         
     | 
| 
       111 
123 
     | 
    
         
             
                  /CAPCHA_NOT_READY/i
         
     | 
| 
       112 
124 
     | 
    
         
             
                end
         
     | 
| 
       113 
125 
     | 
    
         | 
| 
       114 
     | 
    
         
            -
                # Any error that might be returned by in.php or res.php request
         
     | 
| 
      
 126 
     | 
    
         
            +
                # Any error that might be returned by in.php or res.php request.
         
     | 
| 
       115 
127 
     | 
    
         
             
                def errors_regexp
         
     | 
| 
       116 
128 
     | 
    
         
             
                  /(ERROR|BANNED|MAX_USER_TURN|REPORT_NOT_RECORDED)/i
         
     | 
| 
       117 
129 
     | 
    
         
             
                end
         
     | 
| 
       118 
130 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
                # Makes a delay between requests
         
     | 
| 
      
 131 
     | 
    
         
            +
                # Makes a delay between requests.
         
     | 
| 
       120 
132 
     | 
    
         
             
                def wait_for(seconds)
         
     | 
| 
       121 
133 
     | 
    
         
             
                  puts "Waiting for #{seconds} seconds"
         
     | 
| 
       122 
134 
     | 
    
         
             
                  seconds.times do |i|
         
     | 
| 
         @@ -2,7 +2,6 @@ require 'base64' 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module CaptchaSolver
         
     | 
| 
       4 
4 
     | 
    
         
             
              class RecaptchaV1 < Base
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
5 
     | 
    
         
             
                attr_reader :image_path, :help_params
         
     | 
| 
       7 
6 
     | 
    
         | 
| 
       8 
7 
     | 
    
         
             
                def initialize(args)
         
     | 
| 
         @@ -43,40 +42,21 @@ module CaptchaSolver 
     | 
|
| 
       43 
42 
     | 
    
         
             
                  }[help_params[:language].to_sym] || 0
         
     | 
| 
       44 
43 
     | 
    
         
             
                end
         
     | 
| 
       45 
44 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
                def make_start_request
         
     | 
| 
       47 
     | 
    
         
            -
                  RestClient::Request.execute(
         
     | 
| 
       48 
     | 
    
         
            -
                    method: :post,
         
     | 
| 
       49 
     | 
    
         
            -
                    url: 'http://rucaptcha.com/in.php',
         
     | 
| 
       50 
     | 
    
         
            -
                    proxy: "http://#{proxy_address}",
         
     | 
| 
       51 
     | 
    
         
            -
                    headers: default_request_headers,
         
     | 
| 
       52 
     | 
    
         
            -
                    payload: default_request_params.merge(
         
     | 
| 
       53 
     | 
    
         
            -
                      body: base64_image,
         
     | 
| 
       54 
     | 
    
         
            -
                      method: :base64,
         
     | 
| 
       55 
     | 
    
         
            -
                      phrase: phrase,
         
     | 
| 
       56 
     | 
    
         
            -
                      regsense: register_sensitive,
         
     | 
| 
       57 
     | 
    
         
            -
                      numeric: numeric,
         
     | 
| 
       58 
     | 
    
         
            -
                      calc: calculation,
         
     | 
| 
       59 
     | 
    
         
            -
                      language: language,
         
     | 
| 
       60 
     | 
    
         
            -
                    )
         
     | 
| 
       61 
     | 
    
         
            -
                  )
         
     | 
| 
       62 
     | 
    
         
            -
                end
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                def make_complete_request
         
     | 
| 
       65 
     | 
    
         
            -
                  RestClient::Request.execute(
         
     | 
| 
       66 
     | 
    
         
            -
                    method: :post,
         
     | 
| 
       67 
     | 
    
         
            -
                    url: 'http://rucaptcha.com/res.php',
         
     | 
| 
       68 
     | 
    
         
            -
                    proxy: "http://#{proxy_address}",
         
     | 
| 
       69 
     | 
    
         
            -
                    headers: default_request_headers,
         
     | 
| 
       70 
     | 
    
         
            -
                    payload: default_request_params.merge(
         
     | 
| 
       71 
     | 
    
         
            -
                      id: rucaptcha_id,
         
     | 
| 
       72 
     | 
    
         
            -
                      action: 'get'
         
     | 
| 
       73 
     | 
    
         
            -
                    )
         
     | 
| 
       74 
     | 
    
         
            -
                  )
         
     | 
| 
       75 
     | 
    
         
            -
                end
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
45 
     | 
    
         
             
                def base64_image
         
     | 
| 
       78 
46 
     | 
    
         
             
                  @base64_image ||=
         
     | 
| 
       79 
47 
     | 
    
         
             
                    File.open(image_path, 'rb') { |file| Base64.encode64(file.read) }
         
     | 
| 
       80 
48 
     | 
    
         
             
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                def start_request_params
         
     | 
| 
      
 51 
     | 
    
         
            +
                  {
         
     | 
| 
      
 52 
     | 
    
         
            +
                    body: base64_image,
         
     | 
| 
      
 53 
     | 
    
         
            +
                    method: 'base64',
         
     | 
| 
      
 54 
     | 
    
         
            +
                    phrase: phrase,
         
     | 
| 
      
 55 
     | 
    
         
            +
                    regsense: register_sensitive,
         
     | 
| 
      
 56 
     | 
    
         
            +
                    numeric: numeric,
         
     | 
| 
      
 57 
     | 
    
         
            +
                    calc: calculation,
         
     | 
| 
      
 58 
     | 
    
         
            +
                    language: language,
         
     | 
| 
      
 59 
     | 
    
         
            +
                  }
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
       81 
61 
     | 
    
         
             
              end
         
     | 
| 
       82 
62 
     | 
    
         
             
            end
         
     | 
| 
         @@ -10,31 +10,12 @@ module CaptchaSolver 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
                private
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
                def  
     | 
| 
       14 
     | 
    
         
            -
                   
     | 
| 
       15 
     | 
    
         
            -
                    method:  
     | 
| 
       16 
     | 
    
         
            -
                     
     | 
| 
       17 
     | 
    
         
            -
                     
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                    payload: default_request_params.merge(
         
     | 
| 
       20 
     | 
    
         
            -
                      method: 'userrecaptcha',
         
     | 
| 
       21 
     | 
    
         
            -
                      googlekey: google_key,
         
     | 
| 
       22 
     | 
    
         
            -
                      pageurl: page_url
         
     | 
| 
       23 
     | 
    
         
            -
                    )
         
     | 
| 
       24 
     | 
    
         
            -
                  )
         
     | 
| 
       25 
     | 
    
         
            -
                end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                def make_complete_request
         
     | 
| 
       28 
     | 
    
         
            -
                  RestClient::Request.execute(
         
     | 
| 
       29 
     | 
    
         
            -
                    method: :post,
         
     | 
| 
       30 
     | 
    
         
            -
                    url: 'http://rucaptcha.com/res.php',
         
     | 
| 
       31 
     | 
    
         
            -
                    proxy: "http://#{proxy_address}",
         
     | 
| 
       32 
     | 
    
         
            -
                    headers: default_request_headers,
         
     | 
| 
       33 
     | 
    
         
            -
                    payload: default_request_params.merge(
         
     | 
| 
       34 
     | 
    
         
            -
                      id: rucaptcha_id,
         
     | 
| 
       35 
     | 
    
         
            -
                      action: 'get'
         
     | 
| 
       36 
     | 
    
         
            -
                    )
         
     | 
| 
       37 
     | 
    
         
            -
                  )
         
     | 
| 
      
 13 
     | 
    
         
            +
                def start_request_params
         
     | 
| 
      
 14 
     | 
    
         
            +
                  {
         
     | 
| 
      
 15 
     | 
    
         
            +
                    method: 'userrecaptcha',
         
     | 
| 
      
 16 
     | 
    
         
            +
                    googlekey: google_key,
         
     | 
| 
      
 17 
     | 
    
         
            +
                    pageurl: page_url
         
     | 
| 
      
 18 
     | 
    
         
            +
                  }
         
     | 
| 
       38 
19 
     | 
    
         
             
                end
         
     | 
| 
       39 
20 
     | 
    
         
             
              end
         
     | 
| 
       40 
21 
     | 
    
         
             
            end
         
     |