A2C工单修复
This commit is contained in:
+37
-9
@@ -64,34 +64,37 @@ class A2c extends AbstractScrmSpider
|
||||
}
|
||||
|
||||
/**
|
||||
* A2C:业务域无需 cf_clearance;短链仍作 pageUrl,sessionKey 固定业务域
|
||||
* A2C:业务域 + 分享 id 会话;短链仍作 pageUrl,landingUrlHint 供 Node 直达长链
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
private function buildAntiBotConfig()
|
||||
{
|
||||
$sessionHost = $this->resolveA2cSessionHost();
|
||||
$sessionScope = $this->resolveA2cSessionScope();
|
||||
|
||||
return [
|
||||
'enabled' => true,
|
||||
'profile' => 'real',
|
||||
'turnstile' => true,
|
||||
'solverFallback' => false,
|
||||
'solverFallback' => true,
|
||||
'cfClearanceRequired' => false,
|
||||
'sessionKey' => 'a2c:' . $sessionHost,
|
||||
'sessionKey' => 'a2c:' . $sessionScope,
|
||||
'challengeTimeoutMs' => 60000,
|
||||
'landingUrlHint' => $this->landingUrl,
|
||||
'businessHostHint' => $sessionHost,
|
||||
'cfCloudflareSolver' => true,
|
||||
'cfChallengeMode' => 'managed',
|
||||
'businessHostHint' => $this->resolveA2cSessionHost(),
|
||||
'postCfReadyUrlContains' => '/visitors/counter/share',
|
||||
'postCfReadySelector' => '.btn-next',
|
||||
'postCfReadyTimeoutMs' => 30000,
|
||||
'postCfReadySelector' => '.el-table',
|
||||
'postCfReadyApiUrl' => '/api/talk/counter/share/record/list',
|
||||
'postCfReadyTimeoutMs' => 60000,
|
||||
'postCfSettleMs' => 500,
|
||||
'postCfSpaWaitMs' => 4000,
|
||||
'postCfSpaWaitMs' => 8000,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* A2C 会话域:HTTP 预解析无法穿透短链 CF 时,回退到业务域 user.a2c.chat
|
||||
* A2C 业务域 host
|
||||
*/
|
||||
private function resolveA2cSessionHost()
|
||||
{
|
||||
@@ -111,6 +114,31 @@ class A2c extends AbstractScrmSpider
|
||||
return 'user.a2c.chat';
|
||||
}
|
||||
|
||||
/**
|
||||
* A2C 会话 scope:host + share id
|
||||
*/
|
||||
private function resolveA2cSessionScope()
|
||||
{
|
||||
$host = $this->resolveA2cSessionHost();
|
||||
$shareId = $this->extractA2cShareId($this->pageUrl);
|
||||
if ($shareId === '' && $this->landingUrl !== '') {
|
||||
$shareId = $this->extractA2cShareId($this->landingUrl);
|
||||
}
|
||||
|
||||
return $shareId !== '' ? $host . ':' . $shareId : $host;
|
||||
}
|
||||
|
||||
private function extractA2cShareId($url)
|
||||
{
|
||||
$query = (string) parse_url($url, PHP_URL_QUERY);
|
||||
if ($query === '') {
|
||||
return '';
|
||||
}
|
||||
parse_str($query, $params);
|
||||
|
||||
return isset($params['id']) ? trim((string) $params['id']) : '';
|
||||
}
|
||||
|
||||
protected function extractListTotalPages($listFirstPageData, $countData = null)
|
||||
{
|
||||
$default_per_page_count = self::DEFAULT_PER_PAGE_COUNT;
|
||||
|
||||
+1
-1
@@ -85,7 +85,7 @@ try {
|
||||
// 长链:快速验证业务页拦截(推荐先测通)
|
||||
// $pageUrl = 'https://user.a2c.chat/visitors/counter/share?id=1b2cf9a91e2647c185b252e723c871de';
|
||||
// 短链:与客户后台一致,上线前必须回归
|
||||
$pageUrl = 'https://yyk.ink/3xj1B2';
|
||||
$pageUrl = 'https://yyk.ink/5H3O8b';
|
||||
$username = "";
|
||||
$password = "";
|
||||
$spider = (new A2c($pageUrl, $username, $password))->setVerbose(true);
|
||||
|
||||
Reference in New Issue
Block a user