Class: Decaptcha::Provider::DeathByCaptcha::Socket
- Inherits:
-
Base
- Object
- Base
- Base
- Decaptcha::Provider::DeathByCaptcha::Socket
show all
- Defined in:
- lib/decaptcha/provider/death_by_captcha/socket.rb
Constant Summary
collapse
- API_SERVER_HOST =
'deathbycaptcha.com'
- API_SERVER_FIRST_PORT =
8123
- API_SERVER_LAST_PORT =
8130
- API_VERSION =
'DBC/Ruby v3.0'
- SOFTWARE_VENDOR_ID =
0
- DEFAULT_TIMEOUT =
60
- POLLS_COUNT =
4
- POLLS_PERIOD =
15
- POLLS_INTERVAL =
5
Instance Attribute Summary
Attributes inherited from Base
#login, #password, #timeout
Instance Method Summary
collapse
Methods inherited from Base
#initialize
Methods inherited from Base
#mime_type
Instance Method Details
#build_response(data) ⇒ Object
132
133
134
135
136
137
138
139
140
|
# File 'lib/decaptcha/provider/death_by_captcha/socket.rb', line 132
def build_response(data)
response = Decaptcha::Response.new
response.id = data['captcha']
response.text = data['text']
response.invalid = !data['is_correct']
response.banned = data['banned']
response.balance = data['balance']
response
end
|
#compile_params(additional_params) ⇒ Object
142
143
144
145
146
147
148
149
150
151
152
|
# File 'lib/decaptcha/provider/death_by_captcha/socket.rb', line 142
def compile_params(additional_params)
params = {
:username => @login,
:password => Digest::SHA1.hexdigest(@password),
:is_hashed => 1,
:swid => SOFTWARE_VENDOR_ID,
:version => API_VERSION
}
params.merge additional_params
end
|
#delete(response_obj) ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
# File 'lib/decaptcha/provider/death_by_captcha/socket.rb', line 70
def delete(response_obj)
params = {
:username => @login,
:password => Digest::SHA1.hexdigest(@password),
:is_hashed => 1,
:swid => SOFTWARE_VENDOR_ID,
:version => API_VERSION
}
delete_url = "#{response_obj.location}/remove"
RestClient.post delete_url, params, :accept => :json do |response, request, result|
if response.code == 200
response_obj.deleted = true
else
raise DeletionError
end
end
response_obj
end
|
#invalid(response_obj) ⇒ Object
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/decaptcha/provider/death_by_captcha/socket.rb', line 92
def invalid(response_obj)
params = {
:username => @login,
:password => Digest::SHA1.hexdigest(@password),
:is_hashed => 1,
:swid => SOFTWARE_VENDOR_ID,
:version => API_VERSION
}
invalidation_url = "#{response_obj.location}/report"
RestClient.post invalidation_url, params, :accept => :json do |response, request, result|
if response.code == 200
response_obj.invalid = true
else
raise InvalidationError, response
end
end
response_obj
end
|
#make_request(options) ⇒ Object
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
# File 'lib/decaptcha/provider/death_by_captcha/socket.rb', line 114
def make_request(options)
host = TCPSocket.getaddress API_SERVER_HOST
port = API_SERVER_FIRST_PORT + rand(API_SERVER_LAST_PORT - API_SERVER_FIRST_PORT + 1)
connection = TCPSocket.new(host, port)
connection.write compile_params(options).to_json
buffer = ""
while data = connection.read(1000)
buffer = buffer + data
end
connection.close
JSON.parse buffer rescue nil
end
|
#result(response_obj) ⇒ Object
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/decaptcha/provider/death_by_captcha/socket.rb', line 59
def result(response_obj)
options = { :cmd => 'get_text', :captcha => response_obj.id }
data = make_request(options)
if data.nil? || data.empty?
raise ResultError
end
build_response(data)
end
|
#upload(args = {}) ⇒ Object
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/decaptcha/provider/death_by_captcha/socket.rb', line 21
def upload(args = {})
filename = args[:filename]
options = { :cmd => 'upload',
:captcha => Base64::encode64(File.read(filename)) }
data = make_request(options)
if data.nil? || data.empty?
raise UploadError
end
build_response(data)
end
|
#upload_and_poll(args = {}) ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/decaptcha/provider/death_by_captcha/socket.rb', line 36
def upload_and_poll(args = {})
user_timeout = args[:timeout] || DEFAULT_TIMEOUT
response = upload(args)
kill_time = Time.now + user_timeout
response = ''
while (Time.now < kill_time) do
response = result(response)
if response.text
break
elsif response.invalid
raise InvalidationError, response
else
sleep POLLS_PERIOD
end
end
response
end
|