get csrf before send request

This commit is contained in:
2024-01-11 13:22:32 +01:00
parent 8b4a895cfb
commit 8063218514
4 changed files with 185 additions and 22 deletions
+35 -19
View File
@@ -1,14 +1,15 @@
import random import random
import time import time
from http.cookies import SimpleCookie
from db.mongo_manager import MONGO_STORE_MANAGER from db.mongo_manager import MONGO_STORE_MANAGER
from excel_reader import read_contacts from excel_reader import read_contacts
from models.contact_pojo import ContactPojo from models.contact_pojo import ContactPojo
from queue_message.receiver import Receiver from queue_message.receiver import Receiver
from workers.captcha_result_getter import CaptchaResultGetter, HERMES_REGISTER
from workers.sender import Sender from workers.sender import Sender
IPFIY = 'http://api.ipify.org' IPFIY = 'http://api.ipify.org'
HERMES_REGISTER = "https://rendezvousparis.hermes.com/client/register"
NGROK_TEST = "https://bcc6-193-164-156-53.ngrok-free.app" NGROK_TEST = "https://bcc6-193-164-156-53.ngrok-free.app"
@@ -34,7 +35,33 @@ def filter_contacts(_contact_list: list) -> list:
return _contact_list_to_book return _contact_list_to_book
def get_valid_csrf() -> str:
captchaResultGetter = CaptchaResultGetter()
_valid_cookie = captchaResultGetter.get_valid_cookie()
while _valid_cookie is None:
_valid_cookie = captchaResultGetter.get_valid_cookie()
new_csrf = None
while new_csrf is None:
simple_cookie = SimpleCookie()
simple_cookie.load(_valid_cookie)
new_cookies = {k: v.value for k, v in simple_cookie.items()}
new_coolies_str = ""
for key in new_cookies:
print(key)
new_coolies_str = new_coolies_str + key + "=" + new_cookies[key] + ";"
print(new_coolies_str)
valid_cookie = new_coolies_str + "app=eyJmbGFzaCI6e30sImNhY2hlZmxhc2giOltdLCJjc3JmU2VjcmV0IjoiYnRodHNYU1lvdnl4RzVGakpGRDZsQ0JtIn0=;policy=accepted;lang=fr;"
print(valid_cookie)
new_csrf = captchaResultGetter.get_csrf(valid_cookie)
time.sleep(2)
return new_csrf
valid_csrf = None
def on_message(ch, method, properties, body): def on_message(ch, method, properties, body):
global valid_csrf
print(f" [x] Received {body}") print(f" [x] Received {body}")
sender = Sender(body.decode("UTF-8")) sender = Sender(body.decode("UTF-8"))
contact_list = read_contacts('/Users/panlei/Desktop/yahoo_aol_valid_26-2.xlsx') contact_list = read_contacts('/Users/panlei/Desktop/yahoo_aol_valid_26-2.xlsx')
@@ -46,10 +73,15 @@ def on_message(ch, method, properties, body):
# if not is_already_sent(con): # if not is_already_sent(con):
print(con.mail) print(con.mail)
time.sleep(random.randint(1, 5)) time.sleep(random.randint(1, 5))
can_continue = sender.send_request(HERMES_REGISTER, con) if valid_csrf is None:
valid_csrf = get_valid_csrf()
can_continue = sender.send_request(HERMES_REGISTER, con, csrf=valid_csrf)
if not can_continue: if not can_continue:
print("cannot continue") print("cannot continue, valid_csrf is " + valid_csrf)
break break
else:
print("can continue, will reset valid_csrf")
valid_csrf = None
# else: # else:
# print(con.mail + "--> skip") # print(con.mail + "--> skip")
ch.basic_ack(delivery_tag=method.delivery_tag) ch.basic_ack(delivery_tag=method.delivery_tag)
@@ -61,19 +93,3 @@ if __name__ == '__main__':
receiver = Receiver() receiver = Receiver()
receiver.set_up_connection() receiver.set_up_connection()
receiver.listen_to_queue(on_message) receiver.listen_to_queue(on_message)
# if __name__ == '__main__':
# sender = Sender()
# contact_list = read_contacts('/Users/panlei/Desktop/yahoo_aol_valid_26-1.xlsx')
# sub_contact_list = contact_list[200:300]
# for con in sub_contact_list:
# if not is_already_sent(con):
# time.sleep(random.randint(2, 10))
# can_continue = sender.send_request(HERMES_REGISTER, con)
# if not can_continue:
# print("cannot continue")
# break
# else:
# print(con.mail + "--> skip")
# print(con.mail)
# sender.send_request(HERMES_REGISTER, contact_list[-5])
+136
View File
@@ -0,0 +1,136 @@
import json
import random
import re
from typing import Union
import requests
from workers.proxies_constants import PROXY_LIST
API_KEY = "d66aaf490d8aa424a5175e1fbd1aadea"
HOST_ADDRESS = "https://api.2captcha.com/createTask"
HERMES_REGISTER = "https://rendezvousparis.hermes.com/client/register"
class CaptchaResultGetter:
def __init__(self):
self.client_key = API_KEY
self.user_agent = 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36'
self.cookie_str = 'datadome=5Nq~NEP_qQSHC0g_lZNnZmEv36J8gVV~rpZ329xmCkTq2~H3meIoXr4h_b988qB2XW5Te7iEGsvq8BzA5KeFupyrZFh4kgrDyl8hT2UymSByKHzAcDaNIBPDsRu2g_KG; Max-Age=31536000; Domain=.hermes.com; Path=/; Secure; SameSite=None'
pass
def get_csrf(self, cookie: str) -> Union[str, None]:
headers = {'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
'Referer': 'https://www.google.fr',
'Cookie': cookie,
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Dest': 'document',
'Accept-Language': 'fr-FR,fr;q=0.6'}
proxy_to_use = random.choice(PROXY_LIST)
print("received cookie is " + cookie)
try:
response = requests.get(url=HERMES_REGISTER, headers=headers, verify=False, proxies=proxy_to_use)
print(response.status_code)
if response.status_code == 200:
print(response.text)
print(response.url)
return self.extract_csrf_from_html(response.text)
else:
return None
except Exception as error:
print(error)
def extract_csrf_from_html(self, html: str) -> Union[str, None]:
result = re.findall(r'_csrf" value="[A-Za-z0-9-_]+', html)
if len(result) > 0:
result_list = result[0].replace("\"", "").split("=")
print(result_list)
return result_list[-1]
return None
def get_valid_cookie(self, old_valid_cookie: str = None) -> Union[str, None]:
headers = {'content-Type': 'application/x-www-form-urlencoded',
'user-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36',
'accept': '*/*',
'referer': 'https://rendezvousparis.hermes.com/',
'origin': 'https://rendezvousparis.hermes.com/',
'Sec-Fetch-Mode': 'cors',
'sec-fetch-site': 'cross-site',
'sec-gpc': "1",
'sec-fetch-dest': 'empty',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'fr-FR,fr;q=0.6'}
proxy_to_use = random.choice(PROXY_LIST)
print(proxy_to_use)
try:
if old_valid_cookie is None:
raw_data = "jsData=%7B%22opts%22%3A%22endpoint%2CajaxListenerPath%22%2C%22ttst%22%3A33%2C%22ifov%22%3Afalse%2C%22hc%22%3A5%2C%22br_oh%22%3A646%2C%22br_ow%22%3A360%2C%22ua%22%3A%22Mozilla%2F5.0%20(Linux%3B%20Android%2010%3B%20K)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F115.0.0.0%20Mobile%20Safari%2F537.36%22%2C%22wbd%22%3Afalse%2C%22tagpu%22%3A5.156363746356587%2C%22wdif%22%3Afalse%2C%22wdifrm%22%3Afalse%2C%22npmtm%22%3Afalse%2C%22br_h%22%3A646%2C%22br_w%22%3A360%2C%22nddc%22%3A1%2C%22rs_h%22%3A800%2C%22rs_w%22%3A360%2C%22rs_cd%22%3A24%2C%22phe%22%3Afalse%2C%22nm%22%3Afalse%2C%22jsf%22%3Afalse%2C%22lg%22%3A%22fr-FR%22%2C%22pr%22%3A3%2C%22ars_h%22%3A800%2C%22ars_w%22%3A360%2C%22tz%22%3A-60%2C%22str_ss%22%3Atrue%2C%22str_ls%22%3Atrue%2C%22str_idb%22%3Atrue%2C%22str_odb%22%3Atrue%2C%22plgod%22%3Afalse%2C%22plg%22%3A2%2C%22plgne%22%3A%22err%22%2C%22plgre%22%3A%22err%22%2C%22plgof%22%3A%22err%22%2C%22plggt%22%3A%22err%22%2C%22pltod%22%3Afalse%2C%22hcovdr%22%3Afalse%2C%22hcovdr2%22%3Afalse%2C%22plovdr%22%3Afalse%2C%22plovdr2%22%3Afalse%2C%22ftsovdr%22%3Afalse%2C%22ftsovdr2%22%3Afalse%2C%22lb%22%3Afalse%2C%22eva%22%3A33%2C%22lo%22%3Afalse%2C%22ts_mtp%22%3A5%2C%22ts_tec%22%3Atrue%2C%22ts_tsa%22%3Atrue%2C%22vnd%22%3A%22Google%20Inc.%22%2C%22bid%22%3A%22NA%22%2C%22mmt%22%3A%22empty%22%2C%22plu%22%3A%22xBAAAIj%2C99HqdOuX%22%2C%22hdn%22%3Afalse%2C%22awe%22%3Afalse%2C%22geb%22%3Afalse%2C%22dat%22%3Afalse%2C%22med%22%3A%22defined%22%2C%22aco%22%3A%22probably%22%2C%22acots%22%3Afalse%2C%22acmp%22%3A%22probably%22%2C%22acmpts%22%3Atrue%2C%22acw%22%3A%22probably%22%2C%22acwts%22%3Afalse%2C%22acma%22%3A%22maybe%22%2C%22acmats%22%3Afalse%2C%22acaa%22%3A%22probably%22%2C%22acaats%22%3Atrue%2C%22ac3%22%3A%22%22%2C%22ac3ts%22%3Afalse%2C%22acf%22%3A%22probably%22%2C%22acfts%22%3Afalse%2C%22acmp4%22%3A%22maybe%22%2C%22acmp4ts%22%3Afalse%2C%22acmp3%22%3A%22probably%22%2C%22acmp3ts%22%3Afalse%2C%22acwm%22%3A%22maybe%22%2C%22acwmts%22%3Afalse%2C%22ocpt%22%3Afalse%2C%22vco%22%3A%22%22%2C%22vcots%22%3Afalse%2C%22vch%22%3A%22probably%22%2C%22vchts%22%3Atrue%2C%22vcw%22%3A%22probably%22%2C%22vcwts%22%3Atrue%2C%22vc3%22%3A%22maybe%22%2C%22vc3ts%22%3Afalse%2C%22vcmp%22%3A%22%22%2C%22vcmpts%22%3Afalse%2C%22vcq%22%3A%22%22%2C%22vcqts%22%3Afalse%2C%22vc1%22%3A%22probably%22%2C%22vc1ts%22%3Atrue%2C%22dvm%22%3A4%2C%22sqt%22%3Afalse%2C%22so%22%3A%22portrait-primary%22%2C%22wdw%22%3Atrue%2C%22cokys%22%3A%22bG9hZFRpbWVzY3NpL%3D%22%2C%22ecpc%22%3Afalse%2C%22lgs%22%3Atrue%2C%22lgsod%22%3Afalse%2C%22psn%22%3Atrue%2C%22edp%22%3Afalse%2C%22addt%22%3Atrue%2C%22wsdc%22%3Atrue%2C%22ccsr%22%3Atrue%2C%22nuad%22%3Atrue%2C%22bcda%22%3Atrue%2C%22idn%22%3Atrue%2C%22capi%22%3Afalse%2C%22svde%22%3Afalse%2C%22vpbq%22%3Atrue%2C%22ucdv%22%3Afalse%2C%22spwn%22%3Afalse%2C%22emt%22%3Afalse%2C%22bfr%22%3Afalse%2C%22dbov%22%3Afalse%2C%22cfpfe%22%3A%22ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudFsnXHg3MVx4NzVceDY1XHg3Mlx4NzlceDUzXHg2NVx4NmNceDY1XHg2M1x4NzRceDZmXHg3MiddKCdceDYyXHg3Mlx4NmZceDc3XHg3M1x4NjVceDcyXHg2Nlx4NmNceDZmXHg3N1x4MmRceDYzXHg2Zlx4NmVceDc0XHg2%22%2C%22stcfp%22%3A%22Oi8vZC5kaWdpdGFsLmhlcm1lcy90YWdzLmpzOjI6NzQwNDQpCiAgICBhdCB0LmV4cG9ydHMuZGRfYWEgKGh0dHBzOi8vZC5kaWdpdGFsLmhlcm1lcy90YWdzLmpzOjI6ODc5NjkpCiAgICBhdCBodHRwczovL2QuZGlnaXRhbC5oZXJtZXMvdGFncy5qczoyOjUwNDA1%22%2C%22glvd%22%3A%22Qualcomm%22%2C%22glrd%22%3A%22Adreno%20(TM)%20650%22%2C%22wwl%22%3Afalse%2C%22jset%22%3A1704303002%7D&eventCounters=%5B%5D&jsType=ch&ddk=789361B674144528D0B7EE76B35826&Referer=https%253A%252F%252Frendezvousparis.hermes.com%252Fclient%252Fregister&request=%252Fclient%252Fregister&responsePage=origin&ddv=4.19.0"
else:
raw_data = "jsData=%7B%22opts%22%3A%22endpoint%2CajaxListenerPath%22%2C%22ttst%22%3A33%2C%22ifov%22%3Afalse%2C%22hc%22%3A5%2C%22br_oh%22%3A646%2C%22br_ow%22%3A360%2C%22ua%22%3A%22Mozilla%2F5.0%20(Linux%3B%20Android%2010%3B%20K)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F115.0.0.0%20Mobile%20Safari%2F537.36%22%2C%22wbd%22%3Afalse%2C%22tagpu%22%3A5.156363746356587%2C%22wdif%22%3Afalse%2C%22wdifrm%22%3Afalse%2C%22npmtm%22%3Afalse%2C%22br_h%22%3A646%2C%22br_w%22%3A360%2C%22nddc%22%3A1%2C%22rs_h%22%3A800%2C%22rs_w%22%3A360%2C%22rs_cd%22%3A24%2C%22phe%22%3Afalse%2C%22nm%22%3Afalse%2C%22jsf%22%3Afalse%2C%22lg%22%3A%22fr-FR%22%2C%22pr%22%3A3%2C%22ars_h%22%3A800%2C%22ars_w%22%3A360%2C%22tz%22%3A-60%2C%22str_ss%22%3Atrue%2C%22str_ls%22%3Atrue%2C%22str_idb%22%3Atrue%2C%22str_odb%22%3Atrue%2C%22plgod%22%3Afalse%2C%22plg%22%3A2%2C%22plgne%22%3A%22err%22%2C%22plgre%22%3A%22err%22%2C%22plgof%22%3A%22err%22%2C%22plggt%22%3A%22err%22%2C%22pltod%22%3Afalse%2C%22hcovdr%22%3Afalse%2C%22hcovdr2%22%3Afalse%2C%22plovdr%22%3Afalse%2C%22plovdr2%22%3Afalse%2C%22ftsovdr%22%3Afalse%2C%22ftsovdr2%22%3Afalse%2C%22lb%22%3Afalse%2C%22eva%22%3A33%2C%22lo%22%3Afalse%2C%22ts_mtp%22%3A5%2C%22ts_tec%22%3Atrue%2C%22ts_tsa%22%3Atrue%2C%22vnd%22%3A%22Google%20Inc.%22%2C%22bid%22%3A%22NA%22%2C%22mmt%22%3A%22empty%22%2C%22plu%22%3A%22xBAAAIj%2C99HqdOuX%22%2C%22hdn%22%3Afalse%2C%22awe%22%3Afalse%2C%22geb%22%3Afalse%2C%22dat%22%3Afalse%2C%22med%22%3A%22defined%22%2C%22aco%22%3A%22probably%22%2C%22acots%22%3Afalse%2C%22acmp%22%3A%22probably%22%2C%22acmpts%22%3Atrue%2C%22acw%22%3A%22probably%22%2C%22acwts%22%3Afalse%2C%22acma%22%3A%22maybe%22%2C%22acmats%22%3Afalse%2C%22acaa%22%3A%22probably%22%2C%22acaats%22%3Atrue%2C%22ac3%22%3A%22%22%2C%22ac3ts%22%3Afalse%2C%22acf%22%3A%22probably%22%2C%22acfts%22%3Afalse%2C%22acmp4%22%3A%22maybe%22%2C%22acmp4ts%22%3Afalse%2C%22acmp3%22%3A%22probably%22%2C%22acmp3ts%22%3Afalse%2C%22acwm%22%3A%22maybe%22%2C%22acwmts%22%3Afalse%2C%22ocpt%22%3Afalse%2C%22vco%22%3A%22%22%2C%22vcots%22%3Afalse%2C%22vch%22%3A%22probably%22%2C%22vchts%22%3Atrue%2C%22vcw%22%3A%22probably%22%2C%22vcwts%22%3Atrue%2C%22vc3%22%3A%22maybe%22%2C%22vc3ts%22%3Afalse%2C%22vcmp%22%3A%22%22%2C%22vcmpts%22%3Afalse%2C%22vcq%22%3A%22%22%2C%22vcqts%22%3Afalse%2C%22vc1%22%3A%22probably%22%2C%22vc1ts%22%3Atrue%2C%22dvm%22%3A4%2C%22sqt%22%3Afalse%2C%22so%22%3A%22portrait-primary%22%2C%22wdw%22%3Atrue%2C%22cokys%22%3A%22bG9hZFRpbWVzY3NpL%3D%22%2C%22ecpc%22%3Afalse%2C%22lgs%22%3Atrue%2C%22lgsod%22%3Afalse%2C%22psn%22%3Atrue%2C%22edp%22%3Afalse%2C%22addt%22%3Atrue%2C%22wsdc%22%3Atrue%2C%22ccsr%22%3Atrue%2C%22nuad%22%3Atrue%2C%22bcda%22%3Atrue%2C%22idn%22%3Atrue%2C%22capi%22%3Afalse%2C%22svde%22%3Afalse%2C%22vpbq%22%3Atrue%2C%22ucdv%22%3Afalse%2C%22spwn%22%3Afalse%2C%22emt%22%3Afalse%2C%22bfr%22%3Afalse%2C%22dbov%22%3Afalse%2C%22cfpfe%22%3A%22ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudFsnXHg3MVx4NzVceDY1XHg3Mlx4NzlceDUzXHg2NVx4NmNceDY1XHg2M1x4NzRceDZmXHg3MiddKCdceDYyXHg3Mlx4NmZceDc3XHg3M1x4NjVceDcyXHg2Nlx4NmNceDZmXHg3N1x4MmRceDYzXHg2Zlx4NmVceDc0XHg2%22%2C%22stcfp%22%3A%22Oi8vZC5kaWdpdGFsLmhlcm1lcy90YWdzLmpzOjI6NzQwNDQpCiAgICBhdCB0LmV4cG9ydHMuZGRfYWEgKGh0dHBzOi8vZC5kaWdpdGFsLmhlcm1lcy90YWdzLmpzOjI6ODc5NjkpCiAgICBhdCBodHRwczovL2QuZGlnaXRhbC5oZXJtZXMvdGFncy5qczoyOjUwNDA1%22%2C%22glvd%22%3A%22Qualcomm%22%2C%22glrd%22%3A%22Adreno%20(TM)%20650%22%2C%22wwl%22%3Afalse%2C%22jset%22%3A1704303002%7D&eventCounters=%5B%5D&jsType=ch&cid={}&ddk=789361B674144528D0B7EE76B35826&Referer=https%253A%252F%252Frendezvousparis.hermes.com%252Fclient%252Fregister&request=%252Fclient%252Fregister&responsePage=origin&ddv=4.19.0".format(
old_valid_cookie)
response = requests.post(url="https://d.digital.hermes/js/", headers=headers, verify=False, data=raw_data,
proxies=proxy_to_use)
print(response.status_code)
if response.status_code == 200:
print(response.text)
returned_result = json.loads(response.text)
new_cookie = returned_result['cookie']
print(response.url)
print(new_cookie)
return new_cookie
except Exception as error:
print("exception received")
print(error)
return None
def extract_cid_from_html(self, html_text):
print(html_text)
matched_result = re.findall(r"cid\':.*", html_text)
print(matched_result)
first_result = matched_result[0].split(",")[0].split(":")[-1]
print(first_result)
return first_result
#
def send_request(self, cid):
data = {}
data['type'] = 'DataDomeSliderTask'
data['websiteURL'] = 'https://rendezvousparis.hermes.com/client/register'
data['captchaUrl'] = "https://geo.captcha-delivery.com/captcha/?initialCi={}".format(cid)
json_data = json.dumps(data)
# requests.post()
#
# if __name__ == '__main__':
# captchaResultGetter = CaptchaResultGetter()
# # csrf = captchaResultGetter.extract_csrf_from_html(
# # """strong>Français</strong> / <a href="?lang=en">English</a> / <a href="?lang=cn">中文</a> / <a href="?lang=jp">日本語</a> / <a href="?lang=kr">한국어</a> / <a href="?lang=ru">Русский</a></div><div class="row"><div class="col-sm-6 offset-sm-3"></div></div><div class="row"><div class="col-md-6 offset-md-3"><div class="text-center"><h1>Bienvenue chez Hermès</h1><div class="client-nav register-for text-center">Demande de rendez-vous pour le vendredi 12 janvier</div><hr/></div><form id="client-registration-form" method="post" action="/client/register" class=""><input type="hidden" name="check" id="check" /><input type="hidden" name="_csrf" value="Qw5FkdRf--yiWD6S527G7Qt40DCLAzk1q21Y" /><div class="mb-3"><label for="prefer" class="control-label">Magasin préféré</label><select id="prefer" name="prefer" class="form-control" data-value=""><option value="">Sans préférence</option><option value="faubourg">Hermès Faubourg Saint-Honoré</option><option value="georgev">Hermès George V</option><option value="sevres">Hermès Sèvres</option></select></div><div class="mb-3">""")
# # print(csrf)
# contact_list = read_contacts('/Users/panlei/Desktop/yahoo_aol_valid_26-2.xlsx')
# # remove already booked contacts
# sub_contact_list = filter_contacts(contact_list)
# random.shuffle(sub_contact_list)
# valid_cookie = captchaResultGetter.get_valid_cookie()
# contact = random.choice(sub_contact_list)
# if valid_cookie is not None:
# # new_csrf = captchaResultGetter.get_csrf(valid_cookie)
# new_csrf = None
# # if new_csrf is not None:
# # print(new_csrf)
# simple_cookie = SimpleCookie()
# simple_cookie.load(valid_cookie)
# new_cookies = {k: v.value for k, v in simple_cookie.items()}
# new_coolies_str = ""
# for key in new_cookies:
# print(key)
# new_coolies_str = new_coolies_str + key + "=" + new_cookies[key] + ";"
# print(new_coolies_str)
# valid_cookie = new_coolies_str + "app=eyJmbGFzaCI6e30sImNhY2hlZmxhc2giOltdLCJjc3JmU2VjcmV0IjoiYnRodHNYU1lvdnl4RzVGakpGRDZsQ0JtIn0=;policy=accepted;lang=fr;"
# print(valid_cookie)
# new_csrf = captchaResultGetter.get_csrf(valid_cookie)
# if new_csrf is not None:
# sender = Sender(valid_cookie)
# sender.send_request(HERMES_REGISTER, contact=contact, csrf=new_csrf)
+7
View File
@@ -0,0 +1,7 @@
class LinkValidator:
def __init__(self):
pass
def send_request(self, link):
pass
+7 -3
View File
@@ -39,8 +39,11 @@ class Sender:
def get_csrf(self): def get_csrf(self):
pass pass
def send_request(self, url, contact: ContactPojo): def send_request(self, url, contact: ContactPojo, csrf: str = None):
csrf = '5tHIY0Tf-AEKRQB7dbM7-_OIh7pZG_HdLsAk' if csrf is None:
_csrf = '5tHIY0Tf-AEKRQB7dbM7-_OIh7pZG_HdLsAk'
else:
_csrf = csrf
headers = {'Content-Type': 'application/x-www-form-urlencoded', headers = {'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36', 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Mobile Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
@@ -48,13 +51,14 @@ class Sender:
'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Dest': 'document', 'Sec-Fetch-Dest': 'document',
'Accept-Language': 'fr-FR,fr;q=0.6'} 'Accept-Language': 'fr-FR,fr;q=0.6'}
data = {'check': '', '_csrf': csrf, 'prefer': '', data = {'check': '', '_csrf': _csrf, 'prefer': '',
'surname': contact.last_name.capitalize(), 'name': contact.first_name.capitalize(), 'surname': contact.last_name.capitalize(), 'name': contact.first_name.capitalize(),
'phone_country': "FR", 'phone_number': contact.phone, 'email': contact.mail, 'phone_country': "FR", 'phone_number': contact.phone, 'email': contact.mail,
'passport_id': contact.passport, 'processing': 'on', 'cgu': 'on'} 'passport_id': contact.passport, 'processing': 'on', 'cgu': 'on'}
print(data) print(data)
try: try:
proxy_to_use = random.choice(PROXY_LIST) proxy_to_use = random.choice(PROXY_LIST)
# proxy_to_use = PROXY_LIST[0]
print(proxy_to_use) print(proxy_to_use)
response = requests.post(url=url, proxies=proxy_to_use, verify=False, headers=headers, data=data, response = requests.post(url=url, proxies=proxy_to_use, verify=False, headers=headers, data=data,
timeout=15) timeout=15)