fix(card): 修复cgc搜卡5s盾验证
This commit is contained in:
@@ -32,3 +32,6 @@ PAY_NOTIFY_URL=
|
|||||||
# 会员配置
|
# 会员配置
|
||||||
USER_MAX_CREATED_CARD_NUM=18
|
USER_MAX_CREATED_CARD_NUM=18
|
||||||
UPLOAD_REWARD_POINTS_GIFT_ID=-1
|
UPLOAD_REWARD_POINTS_GIFT_ID=-1
|
||||||
|
|
||||||
|
# cgc通信密钥
|
||||||
|
CGC_HTTP_PASSWORD=<PASSWORD>
|
||||||
@@ -70,6 +70,9 @@ class Settings(BaseSettings):
|
|||||||
USER_MAX_CREATED_CARD_NUM: int = 18
|
USER_MAX_CREATED_CARD_NUM: int = 18
|
||||||
UPLOAD_REWARD_POINTS_GIFT_ID: int = -1
|
UPLOAD_REWARD_POINTS_GIFT_ID: int = -1
|
||||||
|
|
||||||
|
# cgc通信密钥
|
||||||
|
CGC_HTTP_PASSWORD: str = '<PASSWORD>'
|
||||||
|
|
||||||
model_config = SettingsConfigDict(env_file=f'.env.{ENVIRONMENT}', env_file_encoding='utf-8')
|
model_config = SettingsConfigDict(env_file=f'.env.{ENVIRONMENT}', env_file_encoding='utf-8')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,10 @@ class UpdateCard(BaseModel):
|
|||||||
display_price: condecimal(max_digits=10, decimal_places=2)
|
display_price: condecimal(max_digits=10, decimal_places=2)
|
||||||
|
|
||||||
|
|
||||||
|
class PlatformSessionsIn(BaseModel):
|
||||||
|
data: dict
|
||||||
|
|
||||||
|
|
||||||
class SearchCardOut(Card):
|
class SearchCardOut(Card):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ from parsel import Selector
|
|||||||
from simple_spider_tool import jsonpath, regx_match, format_json
|
from simple_spider_tool import jsonpath, regx_match, format_json
|
||||||
|
|
||||||
from config import settings
|
from config import settings
|
||||||
|
from core.db.engine import get_cache
|
||||||
from core.base.exceptions import SearchCardRetry, SearchCardRetryFail, SearchCardHandlerFail
|
from core.base.exceptions import SearchCardRetry, SearchCardRetryFail, SearchCardHandlerFail
|
||||||
from core.utils.helper import async_retry
|
from core.utils.helper import async_retry, decrypt_aes_cbc, generate_keyname
|
||||||
from core.utils.helper import decrypt_aes_cbc
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -49,14 +49,17 @@ class SiteApi:
|
|||||||
data=None,
|
data=None,
|
||||||
json=None,
|
json=None,
|
||||||
use_abroad_proxy: bool = False,
|
use_abroad_proxy: bool = False,
|
||||||
|
use_random_ua: bool = True,
|
||||||
retry_num: int = 3,
|
retry_num: int = 3,
|
||||||
**kwargs
|
**kwargs
|
||||||
):
|
):
|
||||||
headers = {
|
headers = {
|
||||||
**self.headers,
|
**self.headers,
|
||||||
'User-Agent': self.user_agent.random,
|
|
||||||
**(headers or {}),
|
**(headers or {}),
|
||||||
}
|
}
|
||||||
|
if use_random_ua:
|
||||||
|
headers['User-Agent'] = self.user_agent.random
|
||||||
|
|
||||||
# 境外代理
|
# 境外代理
|
||||||
if use_abroad_proxy:
|
if use_abroad_proxy:
|
||||||
kwargs['proxies'] = {
|
kwargs['proxies'] = {
|
||||||
@@ -69,7 +72,11 @@ class SiteApi:
|
|||||||
r = await self.session.request(
|
r = await self.session.request(
|
||||||
method, url, headers=headers, params=params, data=data, json=json, **kwargs
|
method, url, headers=headers, params=params, data=data, json=json, **kwargs
|
||||||
)
|
)
|
||||||
logger.debug(f'耗时:{url} {r.elapsed}')
|
|
||||||
|
chck_string = 'Just a moment...'
|
||||||
|
if chck_string in r.text:
|
||||||
|
raise SearchCardRetry(chck_string)
|
||||||
|
|
||||||
return r
|
return r
|
||||||
|
|
||||||
except CurlError as e:
|
except CurlError as e:
|
||||||
@@ -95,9 +102,6 @@ class SiteApi:
|
|||||||
'Referer': f'https://www.psacard.com/cert/{cert_number}',
|
'Referer': f'https://www.psacard.com/cert/{cert_number}',
|
||||||
}
|
}
|
||||||
r = await self.get(url, headers=headers, impersonate="chrome110")
|
r = await self.get(url, headers=headers, impersonate="chrome110")
|
||||||
chck_string = 'Just a moment...'
|
|
||||||
if chck_string in r.text:
|
|
||||||
raise SearchCardRetry(chck_string)
|
|
||||||
return r
|
return r
|
||||||
|
|
||||||
async def psa_images(self, cert_number: str | int, images_id: str | int):
|
async def psa_images(self, cert_number: str | int, images_id: str | int):
|
||||||
@@ -126,10 +130,15 @@ class SiteApi:
|
|||||||
async def cgc(self, cert_number: str | int):
|
async def cgc(self, cert_number: str | int):
|
||||||
"""CGC"""
|
"""CGC"""
|
||||||
url = f'https://www.cgccards.com/certlookup/{cert_number}/'
|
url = f'https://www.cgccards.com/certlookup/{cert_number}/'
|
||||||
headers = {
|
redis_conn = await get_cache()
|
||||||
'referer': 'https://www.cgccards.com/'
|
async with redis_conn:
|
||||||
}
|
cache_session_str = await redis_conn.get(generate_keyname('session:cgc'))
|
||||||
return await self.get(url, headers=headers, impersonate="chrome110")
|
if isinstance(cache_session_str, str):
|
||||||
|
headers = ujson.decode(cache_session_str)
|
||||||
|
else:
|
||||||
|
headers = {}
|
||||||
|
|
||||||
|
return await self.get(url, headers=headers, use_random_ua=False, use_abroad_proxy=True)
|
||||||
|
|
||||||
async def gbtc(self, cert_number: str | int):
|
async def gbtc(self, cert_number: str | int):
|
||||||
"""北京公博"""
|
"""北京公博"""
|
||||||
|
|||||||
Reference in New Issue
Block a user