指数
新的Geetest API支持
什么是“Geetest”挑战?
他们面临的挑战通常要求用户对齐并单击某些图像。
为了方便起见,我们实现了对Geetest API的支持。如果您的软件可以使用它并支持最小配置,则应立即使用Death By Captcha解码Geetest。
- Geetest API: 提供了一个网站URL和GEETEST网站密钥,API返回一个令牌,您将使用该代币在页面中与Geetest挑战一起提交表格。
价钱
暂时,价格为 $2.89/1K Geetest的挑战正确解决了。据报道,您不会为您的geetest收费。请注意,此定价仅适用于新的Geetest挑战,因此只有使用此特定API的客户才会收取上述费率。
Geetest API常见问题解答:
- Geetest v3 API的POST参数是什么?
-
- username: 您的DBC帐户用户名
- password: 您的DBC帐户密码
- type=8: 类型8指定这是一个Geetest API
- geetest_params=json(payload): 访问Geetest挑战的数据 JSON有效负载结构:
-
proxy: 您的代理URL和凭据(如果有)。例证:
- http://127.0.0.1:3128
- http://user:password@127.0.0.1:3128
-
proxytype: 您的代理连接协议。有关支持的代理类型,请参见支持哪些代理类型? 示例:
- HTTP
-
gt: 您在目标网站上找到的GT参数的值。
例子:
- 022397c99c9f646f6477822485f30404
-
challenge: 您在目标网站上找到的"challenge"参数的值。
例子:
- 38c0168576e204c23a4863a16202cac9
- pageurl: Geetest挑战页面的URL。这个URL必须包含Geetest加载的路径。例如:如果您要解决的Geetest在http://test.com/path1中,则pageurl必须是http://test.com/path1,而不是http://test.com。
代理参数是可选的,但是我们强烈建议使用一个解决方案的IP之间的不一致之处,以防止提供的页面拒绝(如果没有提供代理)和提交的IP验证解决方案(您的)。
注意:如果提供了代理,则proxytype是必需的参数。
geetest_params的完整示例:
{ "proxy": "http://user:password@127.0.0.1:1234", "proxytype": "HTTP", "gt": "022397c99c9f646f6477822485f30404", "challenge": "4c95da9e91b49a980a3b79cd7506f12b", "pageurl": "https://testsite.com/xxx-test" }
- Geetest v4 API 的 POST 参数是什么?
-
- username: 您的DBC帐户用户名
- password: 您的DBC帐户密码
- type=9: 类型9指定这是Geetest API
- geetest_params=json(payload): 访问Geetest挑战的数据 JSON有效负载结构:
-
proxy: 您的代理URL和凭据(如果有)。例证:
- http://127.0.0.1:3128
- http://user:password@127.0.0.1:3128
-
proxytype: 您的代理连接协议。有关支持的代理类型,请参见支持哪些代理类型? 示例:
- HTTP
-
captcha_id: 您在目标网站上找到的Captcha_id参数的值。
例子:
- fcd636b4514bf7ac4143922550b3008b
- pageurl: Geetest挑战页面的URL。这个URL必须包含Geetest加载的路径。例如:如果您要解决的Geetest在http://test.com/path1中,则pageurl必须是http://test.com/path1,而不是http://test.com。
geetest_params的完整示例:
{ "proxy": "http://user:password@127.0.0.1:1234", "proxytype": "HTTP", "captcha_id": "fcd636b4514bf7ac4143922550b3008b", "pageurl": "https://testsite.com/xxx-test" }
- geetest v3 api 的响应是什么?
-
-
Geetest API响应具有以下结构。它有效一种用途,并具有2分钟的寿命。这将是如下的字符串:
{ "challenge": "4c95da9e91b49a980a3b79cd7506f12b", "validate": "6496091eb0fb5a83fef98829d034128b", "seccode": "6496091eb0fb5a83fef98829d034128b|jordan" }
- geetest v4 api 的响应是什么?
-
-
Geetest API响应具有以下结构。它有效一种用途,并具有2分钟的寿命。这将是如下的字符串:
{ "captcha_id": "fcd636b4514bf7ac4143922550b3008b", "lot_number": "42c9b8b653c04049b3315cc1df8bf474", "pass_token": "c77f93d1cd1e634a67d1c67bdccf8b5501bfba9858cbc102138fa60b2c532f51", "gen_time": "1666447340", "captcha_output": "[base64_encoded_output]" }
- 支持哪些代理类型?
-
-
当前,仅支持 http 代理。对其他类型的支持将来会添加。
与API客户端一起使用Geetest API:
/**
* Death by Captcha PHP API geetest usage example
*
* @package DBCAPI
* @subpackage PHP
*/
/**
* DBC API clients
*/
require_once '../deathbycaptcha.php';
$username = "username"; // DBC account username
$password = "password"; // DBC account password
$token_from_panel = "your-token-from-panel"; // DBC account authtoken
// Use DeathByCaptcha_SocketClient() class if you want to use SOCKET API.
$client = new DeathByCaptcha_HttpClient($username, $password);
$client->is_verbose = true;
// To use token the first parameter must be authtoken.
// $client = new DeathByCaptcha_HttpClient("authtoken", $token_from_panel);
echo "Your balance is {$client->balance} US cents\n";
// Set the proxy and geetest token data
$data = array(
'proxy' => 'http://user:password@127.0.0.1:1234',
'proxytype' => 'HTTP',
'gt' => '022397c99c9f646f6477822485f30404',
'challenge' => '9c64a44a374e6327bcf2cab4e55839e2',
'pageurl' => 'https://www.captcha.com/en/demo'
);
//Create a json string
$json = json_encode($data);
//Put the type and the json payload
$extra = [
'type' => 8,
'geetest_params' => $json,
];
// Put null the first parameter and add the extra payload
if ($captcha = $client->decode(null, $extra)) {
echo "CAPTCHA {$captcha['captcha']} uploaded\n";
sleep(DeathByCaptcha_Client::DEFAULT_TIMEOUT);
// Poll for CAPTCHA indexes:
if ($text = $client->get_text($captcha['captcha'])) {
echo "CAPTCHA {$captcha['captcha']} solved: ".json_encode($text)."\n";
// // To access the response by item
// echo "challenge: {$text['challenge']}\n";
// echo "validate: {$text['validate']}\n";
// echo "seccode: {$text['seccode']}\n";
// Report an incorrectly solved CAPTCHA.
// Make sure the CAPTCHA was in fact incorrectly solved!
//$client->report($captcha['captcha']);
}
}
# Death by Captcha Python API geetest usage example
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"
# Put the proxy and geetest data
Captcha_dict = {
'proxy': 'http://user:password@127.0.0.1:1234',
'proxytype': 'HTTP',
'captcha_id': 'fcd636b4514bf7ac4143922550b3008b',
'pageurl': 'https://testsite.com/xxx-test'}
# 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=9, geetest_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"]))
# # To access the response by item
# print ("captcha_id:", captcha["text"]["captcha_id"])
# print ("lot_number:", captcha["text"]["lot_number"])
# print ("pass_token:", captcha["text"]["pass_token"])
# print ("gen_time:", captcha["text"]["gen_time"])
# print ("captcha_output:", captcha["text"]["captcha_output"])
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")
package examples;
import com.DeathByCaptcha.AccessDeniedException;
import com.DeathByCaptcha.Client;
import com.DeathByCaptcha.HttpClient;
import com.DeathByCaptcha.SocketClient;
import com.DeathByCaptcha.Captcha;
import org.json.JSONObject;
import java.io.IOException;
class ExampleGeetestV3 {
public static void main(String[] args)
throws Exception {
// Put your DBC username & password or authtoken here:
String username = "your_username_here";
String password = "your_password_here";
String authtoken = "your_authtoken_here";
//Death By Captcha Socket Client
Client client = (Client) (new SocketClient(username, password));
//Death By Captcha http Client
// Client client = (Client) (new HttpClient(username, password));
client.isVerbose = true;
/* Using authtoken
Client client = (Client) new HttpClient(authtoken); */
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 {
// Proxy and geetest data
String proxy = "";
String proxytype = "";
String gt = "022397c99c9f646f6477822485f30404";
String challenge = "514a40a580d49a00274cd1523a045f92";
String pageurl = "https://www.captcha.com/en/demo";
// IMPORTANT: challenge parameter changes everytime
// target site realoads the page
// in this case we can see parameters here
// https://www.captcha.com/demo/gt/register-enFullpage-official?t=1664547919370
// just in this case, every site is different
// we must examine the api calls to geetest to get the challenge
/* Upload a geetest and poll for its status with 120 seconds timeout.
Put your proxy, proxy type, page sitekey, page url and solving timeout (in seconds)
0 or nothing for the default timeout value. */
JSONObject json_params = new JSONObject();
json_params.put("proxy", proxy);
json_params.put("proxytype", proxytype);
json_params.put("gt", gt);
json_params.put("challenge", challenge);
json_params.put("pageurl", pageurl);
captcha = client.decode(8, json_params);
} catch (IOException e) {
System.out.println("Failed uploading CAPTCHA");
return;
}
if (null != captcha) {
System.out.println("CAPTCHA " + captcha.id + " solved: " + captcha.text);
// // To access the response by item
// JSONObject text = new JSONObject(captcha.text);
// System.out.println("challenge: " + text.get("challenge"));
// System.out.println("validate: " + text.get("validate"));
// System.out.println("seccode: " + text.get("seccode"));
/* 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);
}
}
}
// geetest
using System;
using System.Collections;
using DeathByCaptcha;
namespace DeathByCaptcha
{
public class GeetestV3Example
{
static public void Main(string[] argv)
{
// Put your DeathByCaptcha account username and password here.
string username = "username";
string password = "password";
// string token_from_panel = "your-token-from-panel";
// Death By Captcha Socket Client
Client client = (Client) new SocketClient(username, password);
// Death By Captcha http Client
// Client client = (Client) new HttpClient(username, password);
/* To use token authentication the first parameter must be "authtoken".
Client client = (Client) new HttpClient("authtoken", token_from_panel); */
// Put your Proxy credentials and type here
// string proxy = "http://user:password@127.0.0.1:1234";
// string proxyType = "HTTP";
string proxy = "";
string proxyType = "";
string gt = "022397c99c9f646f6477822485f30404";
string challenge = "e90f426feadd58cddcac818444f48a93";
string pageurl = "https://www.captcha.com/en/demo";
// IMPORTANT: challenge parameter changes everytime
// target site realoads the page
// in this case we can see parameters here
// https://www.captcha.com/demo/gt/register-enFullpage-official?t=1664547919370
// just in this case, every site is different
// we must examine the api calls to geetest to get the challenge
string geetestParams = "{\"proxy\": \"" + proxy + "\"," +
"\"proxytype\": \"" + proxyType + "\"," +
"\"gt\": \"" + gt + "\"," +
"\"challenge\": \"" + challenge + "\"," +
"\"pageurl\": \"" + pageurl + "\"}";
try
{
double balance = client.GetBalance();
/* Upload a CAPTCHA and poll for its status. Put the geetest
Json payload, CAPTCHA type and desired solving timeout (in seconds)
here. If solved, you'll receive a DeathByCaptcha.Captcha object. */
Captcha captcha = client.Decode(Client.DefaultTimeout,
new Hashtable()
{
{"type", 8},
{"geetest_params", geetestParams}
});
if (null != captcha)
{
/* The CAPTCHA was solved; captcha.Id property holds
its numeric ID, and captcha.Text holds its text. */
Console.WriteLine("CAPTCHA {0} solved: {1}", captcha.Id,
captcha.Text);
// // To access the response by item
// Hashtable text = (Hashtable) SimpleJson.Reader.Read(captcha.Text);
// Console.WriteLine("challenge: {0}", text["challenge"]);
// Console.WriteLine("validate: {0}", text["validate"]);
// Console.WriteLine("seccode: {0}", text["seccode"]);
// if ( /* check if the CAPTCHA was incorrectly solved */)
// {
// client.Report(captcha);
// }
}
}
catch (AccessDeniedException e)
{
/* Access to DBC API denied, check your credentials and/or balance */
Console.WriteLine("<<< catch : " + e.ToString());
}
}
}
}
Imports System
Imports System.Threading
Imports System.Collections
Imports DeathByCaptcha
Public Class GeetestV3
Public Shared Sub Main(ByVal args As String())
' Put your DBC username & password or authtoken here:
Dim username as String = "username"
Dim password as String = "password"
Dim token_from_panel as String = "your-token-from-panel"
' DBC Socket API client
' Dim client As New SocketClient(username, password)
' DBC HTTP API client
Dim client As New HttpClient(username, password)
' To use token auth the first parameter must be "authtoken"
' Dim client As New HttpClient("authtoken", token_from_panel)
' Proxy and geetest data
Dim proxy as String = "http://user:password@127.0.0.1:1234"
Dim proxyType as String = "HTTP"
Dim gt as String = "81388ea1fc187e0c335c0a8907ff2625"
Dim challenge as String = "4fef47032d12b23005dd41a02873fbee"
Dim pageurl as String = "https://www.captcha.com/en/adaptive-captcha-demo"
Console.WriteLine(String.Format("Your balance is {0,2:f} US cents",
client.Balance))
' Create a JSON with the extra data
Dim geetestParams as String = "{""proxy"": """ + proxy + """," +
"""proxytype"": """ + proxyType + """," +
"""gt"": """ + gt + """," +
"""challenge"": """ + challenge + """," +
"""pageurl"": """ + pageurl + """}"
' Create the payload with the type and the extra data
Dim extraData As New Hashtable()
extraData.Add("type", 8)
extraData.Add("geetest_params", geetestParams)
' Upload a CAPTCHA and poll for its status. Put the geetest
' Json payload, CAPTCHA type and desired solving timeout (in seconds)
' here. If solved, you'll receive a DeathByCaptcha.Captcha object.
Dim captcha As Captcha = client.Decode(DeathByCaptcha.Client.DefaultTimeout, extraData)
If captcha IsNot Nothing Then
Console.WriteLine(String.Format("CAPTCHA {0:d} solved: {1}", captcha.Id,
captcha.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 client.Report(captcha) Then
' Console.WriteLine("Reported as incorrectly solved")
' Else
' Console.WriteLine("Failed reporting as incorrectly solved")
' End If
End If
End Sub
End Class
/*
* Death by Captcha Node.js API geetest usage example
*/
const dbc = require('../deathbycaptcha');
const username = 'username'; // DBC account username
const password = 'password'; // DBC account password
const token_from_panel = 'your-token-from-panel'; // DBC account authtoken
// Proxy and geetest token data
const geetest_params = JSON.stringify({
'proxy': 'http://username:password@proxy.example:3128',
'proxytype': 'HTTP',
'gt': '022397c99c9f646f6477822485f30404',
'challenge': '7bb6d65c31c09f1aec5fe08d08ce44f7',
'pageurl': 'https://www.captcha.com/en/demo'
});
// Death By Captcha Socket Client
// const client = new dbc.SocketClient(username, password);
// Death By Captcha http Client
const client = new dbc.HttpClient(username, password);
// To use token authentication the first parameter must be "authtoken"
// const client = new dbc.HttpClient("authtoken", token_from_panel);
// Get user balance
client.get_balance((balance) => {
console.log(balance);
});
// Solve captcha with type 9 & token_params extra arguments
client.decode({extra: {type: 8, geetest_params: geetest_params}}, (captcha) => {
if (captcha) {
console.log('Captcha ' + captcha['captcha'] + ' solved: ' + JSON.stringify(captcha['text']));
// // To access the response by item
// console.log('challenge:', captcha['text']['challenge'])
// console.log('validate:', captcha['text']['validate'])
// console.log('seccode:', captcha['text']['seccode'])
/*
* Report an incorrectly solved CAPTCHA.
* Make sure the CAPTCHA was in fact incorrectly solved!
* client.report(captcha['captcha'], (result) => {
* console.log('Report status: ' + result);
* });
*/
}
});