Explv Posted January 13, 2017 Share Posted January 13, 2017 (edited) Java: Depends on Apache's HTTPClient Would be interested to know if someone has a better way of doing this import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; public class BanChecker { public final boolean isBanned(final String username, final String password) throws IOException { HttpClient httpClient = HttpClientBuilder.create().build(); // Login to the account HttpResponse loginResponse = login(httpClient, username, password); // Go to the account settings page HttpResponse accountSettingsResponse = getAccountSettings(httpClient, loginResponse); // Get the account history link from the account settings page Optional<String> accountHistoryLink = getAccountHistoryLink(accountSettingsResponse.getEntity().getContent()); if (!accountHistoryLink.isPresent()) { System.out.println("Could not find account history link on settings page"); return false; } // Go to the account history page HttpGet accountHistoryRequest = new HttpGet(accountHistoryLink.get()); HttpResponse accountHistoryResponse = httpClient.execute(accountHistoryRequest); // Search the account history page to check if account is banned return isAccountStatusBanned(accountHistoryResponse.getEntity().getContent()); } private HttpResponse login(final HttpClient httpClient, final String username, final String password) throws IOException { HttpPost loginRequest = new HttpPost("https://secure.runescape.com/m=weblogin/login.ws"); loginRequest.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); loginRequest.addHeader("Accept-Encoding", "gzip, deflate, br"); loginRequest.addHeader("Accept-Language", "en-GB,en-US;q=0.8,en;q=0.6"); loginRequest.addHeader("Cache-Control", "max-age=0"); loginRequest.addHeader("Connection", "keep-alive"); loginRequest.addHeader("Content-Type", "application/x-www-form-urlencoded"); loginRequest.addHeader("Host", "secure.runescape.com"); loginRequest.addHeader("Origin", "https://secure.runescape.com"); loginRequest.addHeader("Referer", "https://secure.runescape.com/m=weblogin/loginform.ws?mod=www&ssl=1&expired=0&dest=account_settings.ws"); loginRequest.addHeader("Upgrade-Insecure-Requests", "1"); loginRequest.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"); List<NameValuePair> loginParameters = new ArrayList<>(); loginParameters.add(new BasicNameValuePair("username", username)); loginParameters.add(new BasicNameValuePair("password", password)); loginParameters.add(new BasicNameValuePair("mod", "www")); loginParameters.add(new BasicNameValuePair("ssl", "1")); loginParameters.add(new BasicNameValuePair("dest", "account_settings.ws")); loginRequest.setEntity(new UrlEncodedFormEntity(loginParameters)); return httpClient.execute(loginRequest); } private HttpResponse getAccountSettings(final HttpClient httpClient, final HttpResponse loginResponse) throws IOException { HttpGet accountSettingsGetRequest = new HttpGet(loginResponse.getFirstHeader("Location").getValue()); return httpClient.execute(accountSettingsGetRequest); } private Optional<String> getAccountHistoryLink(final InputStream accountSettings) throws IOException { Pattern accountHistoryLinkPattern = Pattern.compile("src=\"([^\"]+account_history.ws)\""); try (BufferedReader settingsReader = new BufferedReader(new InputStreamReader(accountSettings))) { String settingsLine; while ((settingsLine = settingsReader.readLine()) != null) { Matcher accountHistoryLinkMatcher = accountHistoryLinkPattern.matcher(settingsLine); if (accountHistoryLinkMatcher.find()) { return Optional.of(accountHistoryLinkMatcher.group(1)); } } } return Optional.empty(); } private boolean isAccountStatusBanned(final InputStream accountHistoryPage) throws IOException { try (BufferedReader accountStatusReader = new BufferedReader(new InputStreamReader(accountHistoryPage))) { String accountStatusLine; while ((accountStatusLine = accountStatusReader.readLine()) != null) { if (accountStatusLine.contains("<b>Banned:</b>")) { return true; } } } return false; } } Python 3: import re import requests def is_banned(username, password): session = requests.Session() login_response = login(session, username, password) url_account_id = get_url_account_id(session, login_response) account_history = get_account_history(session, url_account_id) return'<b>Banned:</b>' in account_history.text def login(session, username, password): login_url = 'https://secure.runescape.com/m=weblogin/login.ws' data = { 'username': username, 'password': password, 'mod' : 'www', 'ssl' : '1', 'dest' : 'account_settings.ws' } headers = { "Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding" : "gzip, deflate, br", "Accept-Language" : "en-GB,en-US;q=0.8,en;q=0.6", "Cache-Control" : "max-age=0", "Connection" : "keep-alive", "Content-Type" : "application/x-www-form-urlencoded", "Host" : "secure.runescape.com", "Origin" : "https://secure.runescape.com", "Referer" : "https://secure.runescape.com/m=weblogin/loginform.ws?mod=www&ssl=1&expired=0&dest=account_settings.ws", "Upgrade-Insecure-Requests" : "1", "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" } return session.post(login_url, data=data, headers=headers, allow_redirects=False) def get_url_account_id(session, login_response): login_redirects = session.resolve_redirects(login_response, login_response.request) # We are interested in the second redirect, so skip the first next(login_redirects) login_redirect = next(login_redirects) return re.search('c=[^/]+', login_redirect.url).group(0) def get_account_history(session, url_account_id): return session.get('https://secure.runescape.com/m=offence-appeal/' + url_account_id + '/account_history.ws') Edited January 13, 2017 by Explv 10 Quote Link to comment Share on other sites More sharing options...
Saiyan Posted January 13, 2017 Share Posted January 13, 2017 Dank will help a lot of people who make automated bot scripts for their farms 1 Quote Link to comment Share on other sites More sharing options...
merloman Posted January 13, 2017 Share Posted January 13, 2017 I have no fucking idea, what i just read, but looks good and by what Saiyan said! its helpful great job! 1 Quote Link to comment Share on other sites More sharing options...
kazemaru Posted January 13, 2017 Share Posted January 13, 2017 seems like you really took work of what i said you yesterday i appriciate that 1 Quote Link to comment Share on other sites More sharing options...
TheWind Posted January 14, 2017 Share Posted January 14, 2017 oooo very nice Quote Link to comment Share on other sites More sharing options...
Chris Posted May 7, 2017 Share Posted May 7, 2017 thx Quote Link to comment Share on other sites More sharing options...
Zummy Posted August 9, 2018 Share Posted August 9, 2018 (edited) Is this method of ban checking still effective considering captcha's and requiring you to have a registered email? Edited August 10, 2018 by Zummy Quote Link to comment Share on other sites More sharing options...
Gpstacker57 Posted November 28, 2019 Share Posted November 28, 2019 working? I'm getting a null pointer exception at line 75 (below) HttpGet accountSettingsGetRequest = new HttpGet(loginResponse.getFirstHeader("Location").getValue()); Quote Link to comment Share on other sites More sharing options...