Quote:
Originally Posted by JocAnis
Where is captcha on gametracker
|
From cloudflare
Just made this script, I tested it, works as charm, but your only problem is the GameTracker captcha. You can bypass that by changing User-Agent I think.
Also, you'll need cacert.pem inside the amxmodx folder, you can change it's path where you want. You can download a certificate from here:
https://curl.se/docs/caextract.html
Tested with a random player from a random server. Results:
Code:
Score: 16552 | Minutes: 15403 | Score p. m.: 1.100000 | Rank: 9
PHP Code:
#include <amxmodx>
#include <curl>
#if !defined MAX_IP_WITH_PORT_LENGTH
#define MAX_IP_WITH_PORT_LENGTH 22
#endif
enum _:PlayerData
{
iScore,
iMinutes,
Float:flAvgScore,
iRank
}
new g_ePlayerData[MAX_PLAYERS + 1][PlayerData]
public plugin_init()
{
register_concmd("test", "SendRequest")
}
public SendRequest(id)
{
new CURL:curl = curl_easy_init();
new szTemp[100];
new szIP[MAX_IP_WITH_PORT_LENGTH]
get_user_ip(0, szIP, charsmax(szIP))
new iID[1]
iID[0] = id
new curl_slist:header
header = curl_slist_append(header, "text/html; charset=UTF-8");
header = curl_slist_append(header, "User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.126 Mobile Safari/537.36");
formatex(szTemp, charsmax(szTemp), "https://www.gametracker.com/player/%n/%s/", id, szIP);
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, szTemp);
curl_easy_setopt(curl, CURLOPT_COOKIE, 1);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header)
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, true);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, "ReceiveData");
curl_easy_setopt(curl, CURLOPT_WRITEDATA, id);
curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, 1028);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_easy_setopt(curl, CURLOPT_CAINFO, "cstrike/addons/amxmodx/cacert.pem");
curl_easy_perform(curl, "CurlCallback", iID, sizeof(iID) );
}
}
public ReceiveData(data[], size, nmemb, id)
{
// The position of the "Score: " div
new iPos = containi(data, "Score:")
if(iPos != -1)
{
g_ePlayerData[id][iScore] = str_to_num(data[iPos + 23])
}
iPos = containi(data, "Minutes Played:")
if(iPos != -1)
{
g_ePlayerData[id][iMinutes] = str_to_num(data[iPos + 32])
}
iPos = containi(data, "Score per Minute:")
if(iPos != -1)
{
g_ePlayerData[id][flAvgScore] = str_to_float(data[iPos + 34])
}
iPos = containi(data, "Rank on Server:")
if(iPos != -1)
{
g_ePlayerData[id][iRank] = str_to_num(data[iPos + 95])
}
return size * nmemb
}
public CurlCallback(CURL:cURLHandle , CURLcode:code, iID[])
{
if(code != CURLE_OK)
{
new szError[CURL_ERROR_SIZE]
curl_easy_strerror(code, szError,charsmax(szError))
log_amx("cURL error: %d ^"%s^"", code, szError);
}
new id = iID[0]
server_print("Score: %d | Minutes: %d | Score p. m.: %f | Rank: %d", g_ePlayerData[id][iScore], g_ePlayerData[id][iMinutes], \
g_ePlayerData[id][flAvgScore], g_ePlayerData[id][iRank])
curl_easy_cleanup(cURLHandle);
}
__________________