Utilizando a autenticação por token
Está página é para usuários que desejam utilizar autenticação por token no API Death By Captcha.
Perguntas Frequentes (FAQ) da autenticação por token
- Por que usar a autenticação por token?
-
A autenticação por meio de token possibilita os usuários manter o usuário e senha ainda mais seguros.
- Por que os tokens são melhores que senhas?
-
Senhas tradicionais tem uma falha imensa: elas são geradas por humanos. Senhas criadas por humanos tendem a ser pouco complexas e fáceis de serem descobertas. Todos nós reutilizamos senhas antigas porque elas são fáceis de se lembrar.
- Onde posso adquirir meu token para autenticação?
-
Pode ser adquirido no seu painel de usuário. Para utilizar a autenticação por token, será preciso habilitar a autenticação 2FA.
Consulte a documentação de ajuda sobre ativação do 2FA em: Aprenda como ativar autenticação 2FA
Agora você pode pegar o seu token no Painel de Usuários
- Posso usar autenticação por token e autenticação por usuário/senha ao mesmo tempo?
-
Não. A autenticação por token pode ser ativada/desativada a qualquer momento no painel de usuários, mas não podem ser usados os dois tipos de autenticação ao mesmo tempo. Caso a autenticação por token esteja desabilitada, você deverá usar a autenticação por usuário e senha, e se a função de token está ativada, use a autenticação via token.
- Onde consigo ativar/desativar a autenticação por token?
-
No painel de usuários tem uma opção de ativar/desativar a autenticação por token.
- O que devo fazer depois disso?
-
Quando usando a autenticação por token no API Death By Captcha , você deve modificar os seus programas para utilizar a autenticação por token (authtoken) ao invés de usuário e senha.
Consulte o código para cada programa e autenticação por token em cada caso
Exemplos de programas
require_once 'deathbycaptcha.php';
// Put your DBC credentials here.
// Use DeathByCaptcha_HttpClient class if you want to use HTTP API.
// To use token username must be authtoken.
$client = new DeathByCaptcha_SocketClient("authtoken", token-from-panel);
// Put the CAPTCHA file name or handler, and desired timeout (in seconds) here:
if ($captcha = $client->decode(CAPTCHA_FILE_NAME, TIMEOUT)) {
echo $captcha['text'] . "\n";
// Report the CAPTCHA if solved incorrectly.
// Make sure the CAPTCHA was in fact incorrectly solved!
if ( ... ) {
$client->report($captcha['captcha']);
}
}
// Repeat for other CAPTCHAs
// Do not forget to reference DeathByCaptcha.dll in your project!
using DeathByCaptcha;
// Put your DBC credentials here.
// Use HttpClient class if you want to use HTTP API.
// Using token authentication in C#/VB, username must be authtoken.
Client client = (Client) new SocketClient("authtoken", token-from-panel);
// Put your CAPTCHA file name, stream, or vector of bytes,
// and desired timeout (in seconds) here:
Captcha captcha = client.Decode(CAPTCHA_FILE_NAME, TIMEOUT);
if (captcha.Solved && captcha.Correct) {
Console.WriteLine("CAPTCHA {0}: {1}", captcha.Id, captcha.Text);
// Report the CAPTCHA if solved incorrectly.
// Make sure the CAPTCHA was in fact incorrectly solved!
if ( ... ) {
client.Report(captcha);
}
}
// Repeat for other CAPTCHAs
// Do not forget to reference DeathByCaptcha.dll in your project!
Imports DeathByCaptcha
' Dim clnt As New HttpClient("autoken", token-from-panel)
Dim clnt As New SocketClient("authtoken", token-from-panel)
Console.WriteLine(String.Format(
"Your balance is {0,2:f} US cents", clnt.Balance))
' Uploading captchas with type = 2 (Coordinates API)
' Dim ext_data As New Hashtable()
' ext_data.Add("type", 2)
' Put your CAPTCHA image file name, file object, stream, or vector
' of bytes, and optional solving timeout (in seconds) here:
' Dim cptch As Captcha = clnt.Decode(
CAPTCHA_FILE_NAME, 2 * Client.DefaultTimeout, ext_data)
' Uploading captchas with type = 3 (Image Group API)
' Dim ext_data As New Hashtable()
' ext_data.Add("type", 3)
' ext_data.Add("banner_text", "Select all images with meat")
' ext_data.Add("grid", "4x4") ' this is optional
' ext_data.Add("banner", bannerFileName)
' Put your CAPTCHA image file name, file object, stream, or vector
' of bytes, and optional solving timeout (in seconds) here:
' Dim cptch As Captcha = clnt.Decode(
CAPTCHA_FILE_NAME, 2 * Client.DefaultTimeout, ext_data)
' Put your CAPTCHA image file name, file object, stream, or vector
' of bytes, and optional solving timeout (in seconds) here:
Dim cptch As Captcha = clnt.Decode(
CAPTCHA_FILE_NAME, 2 * Client.DefaultTimeout)
If cptch IsNot Nothing Then
Console.WriteLine(String.Format(
"CAPTCHA {0:d} solved: {1}", cptch.Id, cptch.Text))
' Report an incorrectly solved CAPTCHA.
' Make sure the CAPTCHA was in fact incorrectly solved, do not
' just report it at random, or you might be banned as abuser.
'If clnt.Report(cptch) Then
' Console.WriteLine("Reported as incorrectly solved")
'Else
' Console.WriteLine("Failed reporting as incorrectly solved")
'End If
End If
' Repeat for other CAPTCHAs
import deathbycaptcha
import json
# Put your DBC account username and password here.
username = "username"
password = "password"
# you can use authtoken instead of user/password combination
# activate and get the authtoken from DBC users panel
authtoken = "authtoken-from-panel"
# Put the proxy and reCaptcha token data
Captcha_dict = {
'proxy': 'http://user:password@127.0.0.1:1234',
'proxytype': 'HTTP',
'googlekey': '6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_f',
'pageurl': 'http://google.com'}
# Create a json string
json_Captcha = json.dumps(Captcha_dict)
client = deathbycaptcha.SocketClient(username, password, authtoken)
# to use http client = deathbycaptcha.HttpClient(username, password)
# client = deathbycaptcha.HttpClient(username, password, authtoken)
try:
balance = client.get_balance()
print(balance)
# Put your CAPTCHA type and Json payload here:
captcha = client.decode(type=4, token_params=json_Captcha)
if captcha:
# The CAPTCHA was solved; captcha["captcha"] item holds its
# numeric ID, and captcha["text"] item its list of "coordinates".
print ("CAPTCHA %s solved: %s" % (captcha["captcha"],
captcha["text"]))
if '': # check if the CAPTCHA was incorrectly solved
client.report(captcha["captcha"])
except deathbycaptcha.AccessDeniedException:
# Access to DBC API denied, check your credentials and/or balance
print ("error: Access to DBC API denied," +
"check your credentials and/or balance")
# Repeat for other CAPTCHAs
import deathbycaptcha
import json
# Put your DBC account username and password here.
username = "username"
password = "password"
# you can use authtoken instead of user/password combination
# activate and get the authtoken from DBC users panel
authtoken = "authtoken-from-panel"
# Put the proxy and reCaptcha token data
captcha_dict = {
'proxy': 'http://user:password@127.0.0.1:1234',
'proxytype': 'HTTP',
'googlekey': '6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_b',
'pageurl': 'http://google.com'}
# Create a json string
json_captcha = json.dumps(captcha_dict)
# to use socket client
client = deathbycaptcha.SocketClient(username, password, authtoken)
# to use http client
# client = deathbycaptcha.HttpClient(username, password, authtoken)
try:
balance = client.get_balance()
print(balance)
# Put your CAPTCHA type and Json payload here:
captcha = client.decode(type=4, token_params=json_captcha)
if captcha:
# The CAPTCHA was solved; captcha["captcha"] item holds
# its numeric ID, and captcha["text"] item its
# list of "coordinates".
print "CAPTCHA %s solved: %s" % (captcha["captcha"],
captcha["text"])
if '': # check if the CAPTCHA was incorrectly solved
client.report(captcha["captcha"])
except deathbycaptcha.AccessDeniedException:
# Access to DBC API denied, check your credentials and/or balance
print "error: Access to DBC API denied, check your credentials" +
"and/or balance"
# Repeat for other CAPTCHAs
const dbc = require('./deathbycaptcha.js');
const username = 'username'; // DBC account username
const password = 'password'; // DBC account password
// if using username/password, authtoken must be an empty string
// authentication token can be enabled in user panel
const authtoken = 'token-from-panel'; //DBC account authtoken
// Proxy and Recaptcha token data
const token_params = JSON.stringify({
'proxy': 'http://username:password@proxy.example:3128',
'proxytype': 'HTTP',
'googlekey': '6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_f',
'pageurl': 'http://google.com'
});
// Death By Captcha Socket Client
// const client = new dbc.SocketClient(username, password, authtoken);
// Death By Captcha http Client
const client = new dbc.HttpClient(username, password, authtoken);
// Get user balance
client.get_balance((balance) => {
console.log(balance);
});
// Solve captcha with type 4 & token_params extra arguments
client.decode({extra: {type: 4, token_params: token_params}},
(captcha) => {
if (captcha) {
console.log('Captcha ' + captcha['captcha'] + ' solved: ' +
captcha['text']);
// Report an incorrectly solved CAPTCHA.
// Make sure the CAPTCHA was in fact incorrectly solved!
// client.report(captcha['captcha'], (result) => {
// console.log('Report status: ' + result);
// });
}
});
// Repeat for other CAPTCHAs
import com.DeathByCaptcha.AccessDeniedException;
import com.DeathByCaptcha.Client;
import com.DeathByCaptcha.HttpClient;
import com.DeathByCaptcha.SocketClient;
import com.DeathByCaptcha.Captcha;
import java.io.IOException;
class ExampleSimple
{
public static void main(String[] args)
throws Exception
{
// Put your DBC username & password || authtoken here:
// if the number of arguments is two we are using authtoken
// if the number of arguments is three we are using
// username/password combination
System.out.println(args.length);
Client client;
// using http API
/*
if(args.length == 3){
client = (Client)(new HttpClient(args[0], args[1]));
}else if(args.length == 2){
client = (Client)(new HttpClient(args[0]));
}else{
System.out.println("Wrong number of arguments");
System.out.println("You must use username/password combination");
System.out.println("Or API key");
return;
}
*/
// using sockets API
if(args.length == 3){
client = (Client)(new SocketClient(args[0], args[1]));
}else if(args.length == 2){
client = (Client)(new SocketClient(args[0]));
}else{
System.out.println("Wrong number of arguments");
System.out.println("You must use username/password combination");
System.out.println("Or API key");
return;
}
client.isVerbose = true;
try {
try {
System.out.println("Your balance is " + client.getBalance()
+ " US cents");
} catch (IOException e) {
System.out.println("Failed fetching balance: " + e.toString());
return;
}
Captcha captcha = null;
try {
// Upload a CAPTCHA and poll for its status with 120 seconds
// timeout. Put you CAPTCHA image file name, file object,
// input stream, or vector of bytes, and optional
// solving timeout (in seconds) here.
if (args.length == 3){
captcha = client.decode(args[2], 120);
}else if (args.length == 2){
captcha = client.decode(args[1], 120);
}else{
System.out.println("Failed uploading CAPTCHA - args");
return;
}
} catch (IOException e) {
System.out.println("Failed uploading CAPTCHA");
return;
}
if (null != captcha) {
System.out.println("CAPTCHA " + captcha.id + " solved: "
+ captcha.text);
// Report incorrectly solved CAPTCHA if necessary.
// Make sure you've checked if the CAPTCHA was in fact
// incorrectly solved, or else you might get banned as abuser.
/*try {
if (client.report(captcha)) {
System.out.println("Reported as incorrectly solved");
} else {
System.out.println(
"Failed reporting incorrectly solved CAPTCHA");
}
} catch (IOException e) {
System.out.println(
"Failed reporting incorrectly solved CAPTCHA: "
+ e.toString());
}*/
} else {
System.out.println("Failed solving CAPTCHA");
}
} catch (com.DeathByCaptcha.Exception e) {
System.out.println(e);
}
}
}
// Repeat for other CAPTCHAs
#!/usr/bin/env perl
use strict;
use warnings;
use lib '.';
use DeathByCaptcha::HttpClient;
use DeathByCaptcha::SocketClient;
my ($username, $password, $filename) = @ARGV;
# Put your DeathByCaptcha username & password here:
# if using authtoken authentication username must be "authtoken"
# and $password must be the authtoken from user panel
# using authtoken in user panel disables username/password authentication
my $client = DeathByCaptcha::HttpClient->new($username, $password);
# my $client = DeathByCaptcha::SocketClient->new($username, $password);
printf("Your balance is %f US cents\n", $client->getBalance());
if ($filename) {
printf("Provided captcha: $filename \n");
# Put your CAPTCHA image file name and desired solving timeout
# (in seconds) here:
my $captcha = $client->decode($filename,
+DeathByCaptcha::Client::DEFAULT_TIMEOUT);
if (defined $captcha) {
print "CAPTCHA " . $captcha->{"captcha"} .
" solved: " . $captcha->{"text"} . "\n";
# Report if the CAPTCHA was solved incorrectly.
# Make sure it was in fact solved incorrect, do not just report every
# CAPTCHA, or you'll get banned as abuser.
# $client->report($captcha->{"captcha"});
}
} else {
printf("No captcha provided \n");
}
// Repeat for other CAPTCHAs