Commit 2f91b362 by baiquan

add setup_proxy

parent af6252a9
import json import json
import logging
import random import random
import time import time
from hashlib import md5 from hashlib import md5
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
import requests import requests
from errors import *
def setup_proxy(addr, port, username, password):
session = requests.Session()
# 配置 SOCKS5 代理 + 远程 DNS 解析
proxy_url = f"socks5h://{username}:{password}@{addr}:{port}"
session.proxies = {
"http": proxy_url,
"https": proxy_url
}
# 配置重试机制
retries = Retry(
total=5,
backoff_factor=0.3,
status_forcelist=[500, 502, 503, 504],
allowed_methods=frozenset(['GET', 'POST'])
)
# 调整 SSL 配置
session.verify = False
session.mount('https://', HTTPAdapter(
max_retries=retries,
pool_connections=100,
pool_maxsize=100
))
# 测试实际业务域名连通性
try:
test_res = session.get(
'https://fxg.jinritemai.com',
timeout=15,
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36'}
)
if test_res.status_code == 200:
logging.info("业务域名连通性验证成功")
test_res = session.get('http://httpbin.org/ip', timeout=10).json()
if test_res['origin'] == addr:
logging.info(f"代理验证成功")
return session
else:
raise AppError(msg="代理验证失败")
else:
raise AppError(msg="业务域名连通性验证失败")
except Exception as e:
raise AppError(msg=f"代理验证失败: {str(e)}")
def encryptParamsId(login_subject_uid, user_identity_id): def encryptParamsId(login_subject_uid, user_identity_id):
e = { e = {
...@@ -38,9 +85,10 @@ def get_access_key(fp_id, app_key, device_id): ...@@ -38,9 +85,10 @@ def get_access_key(fp_id, app_key, device_id):
access_key = obj.hexdigest() access_key = obj.hexdigest()
return access_key return access_key
def update_callback_cookies(cookies, headers, redirect_url, proxies): def update_callback_cookies(cookies, headers, redirect_url, session):
callback_res = requests.get(redirect_url, cookies=cookies, headers=headers, allow_redirects=False, proxies=proxies) callback_res = session.get(redirect_url, cookies=cookies, headers=headers, allow_redirects=False)
return update_cookies(callback_res.cookies, cookies) return update_cookies(callback_res.cookies, cookies)
def get_account_sdk_source_info(): def get_account_sdk_source_info():
data = { data = {
"hardwareConcurrency": 8, "hardwareConcurrency": 8,
......
import logging import logging
from urllib.parse import urlencode from urllib.parse import urlencode
import requests
from common import get_account_sdk_source_info, get_ms_token, encryptParams, encryptParamsId, update_cookies, \ from common import get_account_sdk_source_info, get_ms_token, encryptParams, encryptParamsId, update_cookies, \
update_callback_cookies update_callback_cookies, setup_proxy
from dy_verify import mouse_verify from dy_verify import mouse_verify
def get_callback_cookies(login_cookies, headers, encrypt_params, proxies):
def get_callback_cookies(login_cookies, headers, encrypt_params, session):
account_sdk_source_info = get_account_sdk_source_info() account_sdk_source_info = get_account_sdk_source_info()
check_login_params = { check_login_params = {
'fp': encrypt_params['fp'], 'fp': encrypt_params['fp'],
...@@ -22,7 +21,7 @@ def get_callback_cookies(login_cookies, headers, encrypt_params, proxies): ...@@ -22,7 +21,7 @@ def get_callback_cookies(login_cookies, headers, encrypt_params, proxies):
} }
x_bogus_url = 'https://doudian-sso.jinritemai.com/aff/check_login/' + "?" + urlencode(check_login_params) x_bogus_url = 'https://doudian-sso.jinritemai.com/aff/check_login/' + "?" + urlencode(check_login_params)
check_login_url = x_bogus_url + f'&signature=_02B4Z6wo00001k1CzegAAIDCemYJt5a7r6JNQslAAPSgmx8MO5UrYu5YW6SCdzCrIIqaFJbM6j62JJU3g5yarKiSx7EgoKdBA92pBjYFVyjR9yIxwEceUkyEGviysE59DRUIWFyx3Akm0kWcbc' check_login_url = x_bogus_url + f'&signature=_02B4Z6wo00001k1CzegAAIDCemYJt5a7r6JNQslAAPSgmx8MO5UrYu5YW6SCdzCrIIqaFJbM6j62JJU3g5yarKiSx7EgoKdBA92pBjYFVyjR9yIxwEceUkyEGviysE59DRUIWFyx3Akm0kWcbc'
check_login_res = requests.get(check_login_url, cookies=login_cookies, headers=headers, proxies=proxies) check_login_res = session.get(check_login_url, cookies=login_cookies, headers=headers)
login_subject_uid = check_login_res.json()['login_list'][0]['login_subject_uid'] login_subject_uid = check_login_res.json()['login_list'][0]['login_subject_uid']
user_identity_id = check_login_res.json()['login_list'][0]['user_identity_list'][0]['user_identity_id_str'] user_identity_id = check_login_res.json()['login_list'][0]['user_identity_list'][0]['user_identity_id_str']
encrypt_obj = encryptParamsId(login_subject_uid, user_identity_id) encrypt_obj = encryptParamsId(login_subject_uid, user_identity_id)
...@@ -38,7 +37,7 @@ def get_callback_cookies(login_cookies, headers, encrypt_params, proxies): ...@@ -38,7 +37,7 @@ def get_callback_cookies(login_cookies, headers, encrypt_params, proxies):
'user_identity_id': encrypt_obj['user_identity_id'], 'user_identity_id': encrypt_obj['user_identity_id'],
} }
ticket_url = f"https://doudian-sso.jinritemai.com/aff/subject/login/?subject_aid=4966&fp={encrypt_params['fp']}&aid=4272&language=zh&account_sdk_source=web&account_sdk_source_info={account_sdk_source_info}&msToken={get_ms_token()}" ticket_url = f"https://doudian-sso.jinritemai.com/aff/subject/login/?subject_aid=4966&fp={encrypt_params['fp']}&aid=4272&language=zh&account_sdk_source=web&account_sdk_source_info={account_sdk_source_info}&msToken={get_ms_token()}"
ticket_res = requests.post(ticket_url, cookies=login_cookies, headers=headers, data=ticket_data, proxies=proxies) ticket_res = session.post(ticket_url, cookies=login_cookies, headers=headers, data=ticket_data)
cookies = update_cookies(ticket_res.cookies, login_cookies) cookies = update_cookies(ticket_res.cookies, login_cookies)
ticket = ticket_res.json()['redirect_url'].split('ticket=')[-1] ticket = ticket_res.json()['redirect_url'].split('ticket=')[-1]
redirect_params = { redirect_params = {
...@@ -49,8 +48,8 @@ def get_callback_cookies(login_cookies, headers, encrypt_params, proxies): ...@@ -49,8 +48,8 @@ def get_callback_cookies(login_cookies, headers, encrypt_params, proxies):
'login_member': '1', 'login_member': '1',
'_lid': '312003629857', '_lid': '312003629857',
} }
redirect_res = requests.get('https://fxg.jinritemai.com/index/login', params=redirect_params, cookies=cookies, redirect_res = session.get('https://fxg.jinritemai.com/index/login', params=redirect_params, cookies=cookies,
headers=headers,allow_redirects=False, proxies=proxies) headers=headers,allow_redirects=False)
redirect_url = redirect_res.headers.get('Location') redirect_url = redirect_res.headers.get('Location')
params = { params = {
'login_source': 'doudian_pc_web', 'login_source': 'doudian_pc_web',
...@@ -59,13 +58,19 @@ def get_callback_cookies(login_cookies, headers, encrypt_params, proxies): ...@@ -59,13 +58,19 @@ def get_callback_cookies(login_cookies, headers, encrypt_params, proxies):
'entry_source': '0', 'entry_source': '0',
'ecom_login_extra': '', 'ecom_login_extra': '',
} }
cookies = update_callback_cookies(cookies, headers, redirect_url, proxies) cookies = update_callback_cookies(cookies, headers, redirect_url, session)
callback_res = requests.get('https://fxg.jinritemai.com/ecomauth/loginv1/callback', params=params, cookies=cookies, callback_res = session.get('https://fxg.jinritemai.com/ecomauth/loginv1/callback', params=params, cookies=cookies,
headers=headers, verify=False, proxies=proxies) headers=headers, verify=False)
logging.info(f"-------- get_callback_cookies: cookies获取成功!--------") logging.info(f"-------- get_callback_cookies: cookies获取成功!--------")
return update_cookies(callback_res.cookies, cookies) return update_cookies(callback_res.cookies, cookies)
def login(account, password, headers, proxies): def login(account, password, headers, proxies):
addr = proxies['addr']
port = proxies['port']
username = proxies['username']
proxies_password = proxies['password']
session = setup_proxy(addr, int(port), username, proxies_password)
encrypt_params = encryptParams(account, password) encrypt_params = encryptParams(account, password)
login_params = { login_params = {
'fp': encrypt_params['fp'], 'fp': encrypt_params['fp'],
...@@ -88,7 +93,8 @@ def login(account, password, headers, proxies): ...@@ -88,7 +93,8 @@ def login(account, password, headers, proxies):
'captcha_key': encrypt_params['captcha_key'], 'captcha_key': encrypt_params['captcha_key'],
'redirect_sso_to_login': encrypt_params['redirect_sso_to_login'], 'redirect_sso_to_login': encrypt_params['redirect_sso_to_login'],
} }
login_res = requests.post(login_url, headers=headers, data=data, verify=False, proxies=proxies)
login_res = session.post(login_url, headers=headers, data=data, verify=False)
if login_res.json()['error_code'] == 2046: if login_res.json()['error_code'] == 2046:
logging.info(f"-------- login: 登录失败!--------") logging.info(f"-------- login: 登录失败!--------")
logging.info(f"-------- login: {login_res.json()['description']}--------") logging.info(f"-------- login: {login_res.json()['description']}--------")
...@@ -107,7 +113,7 @@ def login(account, password, headers, proxies): ...@@ -107,7 +113,7 @@ def login(account, password, headers, proxies):
mouse_verify(encrypt_params['fp'], verify_center_decision_conf) mouse_verify(encrypt_params['fp'], verify_center_decision_conf)
except: except:
continue continue
login_res = requests.post(login_url, headers=headers, data=data, verify=False, proxies=proxies) login_res = session.post(login_url, headers=headers, data=data, verify=False)
if login_res.json()['description'] != '滑动滑块进行验证': if login_res.json()['description'] != '滑动滑块进行验证':
logging.info(f"-------- login_verify: 滑块处理成功!--------") logging.info(f"-------- login_verify: 滑块处理成功!--------")
break break
...@@ -115,6 +121,5 @@ def login(account, password, headers, proxies): ...@@ -115,6 +121,5 @@ def login(account, password, headers, proxies):
logging.error(f"-------- login_verify: 处理滑块失败!--------") logging.error(f"-------- login_verify: 处理滑块失败!--------")
logging.error(f"-------- login: 登录失败!--------") logging.error(f"-------- login: 登录失败!--------")
return None return None
logging.info(f"-------- login: 登录成功!--------") return dict(get_callback_cookies(login_res.cookies, headers, encrypt_params, session))
return dict(get_callback_cookies(login_res.cookies, headers, encrypt_params, proxies))
...@@ -3,7 +3,7 @@ from asyncio.log import logger ...@@ -3,7 +3,7 @@ from asyncio.log import logger
from DrissionPage import Chromium from DrissionPage import Chromium
from DrissionPage.common import Settings from DrissionPage.common import Settings
from common import setup_proxy
from config import settings from config import settings
from errors import * from errors import *
from hub_ import * from hub_ import *
...@@ -159,7 +159,12 @@ def getProductName(product_type, product_name): ...@@ -159,7 +159,12 @@ def getProductName(product_type, product_name):
else: else:
raise NotFoundError("未找到城市") raise NotFoundError("未找到城市")
async def createTemplate(cookies, template_params): async def createTemplate(cookies, template_params, proxies):
addr = proxies['addr']
port = proxies['port']
username = proxies['username']
proxies_password = proxies['password']
session = setup_proxy(addr, int(port), username, proxies_password)
params = { params = {
'appid': '1', 'appid': '1',
'aid': '4272', 'aid': '4272',
...@@ -559,7 +564,7 @@ async def createTemplate(cookies, template_params): ...@@ -559,7 +564,7 @@ async def createTemplate(cookies, template_params):
} }
logger.info(rule_list) logger.info(rule_list)
url = 'https://fxg.jinritemai.com/freight/template/createTemplate' url = 'https://fxg.jinritemai.com/freight/template/createTemplate'
response = requests.post(url,params=params,cookies=cookies,headers=HEADERS,json=json_data).json() response = session.post(url,params=params,cookies=cookies,headers=HEADERS,json=json_data).json()
logger.info(response) logger.info(response)
if response['code'] != 0: if response['code'] != 0:
msg = response.get('msg', '') msg = response.get('msg', '')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment