update
This commit is contained in:
@@ -39,29 +39,24 @@ class Crawler extends BaseController
|
||||
]);
|
||||
}
|
||||
|
||||
if (empty($cookiesParam)) {
|
||||
$service = new CrawlerService();
|
||||
try {
|
||||
$cookies = $service->parseCookies($cookiesParam);
|
||||
} catch (\Exception $e) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => '请填写Cookie数据',
|
||||
'msg' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
|
||||
// 解析JSON格式的cookies
|
||||
$cookies = is_string($cookiesParam) ? json_decode($cookiesParam, true) : $cookiesParam;
|
||||
if (json_last_error() !== JSON_ERROR_NONE || empty($cookies)) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => 'Cookie数据格式错误,请检查JSON格式',
|
||||
]);
|
||||
}
|
||||
|
||||
$cookieString = $this->buildCookieString($cookies);
|
||||
|
||||
$cookieString = $service->buildCookieString($cookies);
|
||||
|
||||
// 构建URL获取HTML - 使用GET请求
|
||||
$url = "http://gzrsks.oumakspt.com:62/tyzpwb/stuchooseexam/selectPosition.htm?examstupid=1015&userid={$userid}&bmid={$bmid}&examid={$examid}&aa={$aa}";
|
||||
$baseUrl = $service->getBaseUrl();
|
||||
$url = "{$baseUrl}/stuchooseexam/selectPosition.htm?examstupid=1015&userid={$userid}&bmid={$bmid}&examid={$examid}&aa={$aa}";
|
||||
|
||||
// 构建Referer URL(与浏览器实际访问一致)
|
||||
$refererUrl = "http://gzrsks.oumakspt.com:62/tyzpwb/stuchooseexam/input.htm";
|
||||
$refererUrl = "{$baseUrl}/stuchooseexam/input.htm";
|
||||
|
||||
$ch = curl_init();
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
@@ -72,17 +67,7 @@ class Crawler extends BaseController
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
||||
curl_setopt($ch, CURLOPT_ENCODING, ''); // 自动处理gzip编码
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
|
||||
'Accept-Language: zh-CN,zh;q=0.9',
|
||||
'Accept-Encoding: gzip, deflate',
|
||||
'Cache-Control: no-cache',
|
||||
'Connection: keep-alive',
|
||||
'Cookie: ' . $cookieString,
|
||||
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36',
|
||||
'Referer: ' . $refererUrl,
|
||||
'Upgrade-Insecure-Requests: 1',
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $service->buildHtmlHeaders($cookieString, $refererUrl));
|
||||
|
||||
$html = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
@@ -103,7 +88,6 @@ class Crawler extends BaseController
|
||||
]);
|
||||
}
|
||||
|
||||
$service = new CrawlerService();
|
||||
$options = $service->extractDsdmOptions($html);
|
||||
|
||||
return json([
|
||||
@@ -120,53 +104,6 @@ class Crawler extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建Cookie字符串
|
||||
* @param array $cookies Cookie数组
|
||||
* @return string
|
||||
*/
|
||||
private function buildCookieString(array|string $cookies): string
|
||||
{
|
||||
// 如果直接传入原始Cookie字符串,优先使用
|
||||
if (is_string($cookies)) {
|
||||
return trim($cookies);
|
||||
}
|
||||
|
||||
// 只保留用户填写的Cookie,支持同名键多值(如双JSESSIONID)
|
||||
$cookieData = $cookies['请求 Cookie'] ?? $cookies;
|
||||
$normalized = [];
|
||||
|
||||
foreach ($cookieData as $key => $value) {
|
||||
$k = trim((string)$key);
|
||||
if ($k === '') {
|
||||
continue;
|
||||
}
|
||||
$vals = is_array($value) ? $value : [$value];
|
||||
foreach ($vals as $v) {
|
||||
$v = trim((string)$v);
|
||||
if ($v === '') {
|
||||
continue;
|
||||
}
|
||||
$normalized[$k][] = $v;
|
||||
}
|
||||
}
|
||||
|
||||
// 将 JSESSIONID 放在最前(如果存在),其余按键名顺序,多值全部保留
|
||||
$parts = [];
|
||||
if (isset($normalized['JSESSIONID'])) {
|
||||
foreach ($normalized['JSESSIONID'] as $v) {
|
||||
$parts[] = 'JSESSIONID=' . $v;
|
||||
}
|
||||
unset($normalized['JSESSIONID']);
|
||||
}
|
||||
foreach ($normalized as $k => $vArr) {
|
||||
foreach ($vArr as $v) {
|
||||
$parts[] = $k . '=' . $v;
|
||||
}
|
||||
}
|
||||
|
||||
return implode('; ', $parts);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取职位代码列表
|
||||
@@ -202,23 +139,16 @@ class Crawler extends BaseController
|
||||
]);
|
||||
}
|
||||
|
||||
if (empty($cookiesParam)) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => '请填写Cookie数据',
|
||||
]);
|
||||
}
|
||||
|
||||
// 解析JSON格式的cookies
|
||||
$cookies = is_string($cookiesParam) ? json_decode($cookiesParam, true) : $cookiesParam;
|
||||
if (json_last_error() !== JSON_ERROR_NONE || empty($cookies)) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => 'Cookie数据格式错误,请检查JSON格式',
|
||||
]);
|
||||
}
|
||||
|
||||
$service = new CrawlerService();
|
||||
try {
|
||||
$cookies = $service->parseCookies($cookiesParam);
|
||||
} catch (\Exception $e) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
|
||||
$treeData = $service->getPositionTree($dsdm, $examid, $bmid, $userid, (string)$aa, $cookies);
|
||||
|
||||
// 提取所有CODE作为zwdm
|
||||
@@ -268,22 +198,16 @@ class Crawler extends BaseController
|
||||
]);
|
||||
}
|
||||
|
||||
if (empty($cookiesParam)) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => '请填写Cookie数据',
|
||||
]);
|
||||
}
|
||||
|
||||
$cookies = is_string($cookiesParam) ? json_decode($cookiesParam, true) : $cookiesParam;
|
||||
if (json_last_error() !== JSON_ERROR_NONE || empty($cookies)) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => 'Cookie数据格式错误,请检查JSON格式',
|
||||
]);
|
||||
}
|
||||
|
||||
$service = new CrawlerService();
|
||||
try {
|
||||
$cookies = $service->parseCookies($cookiesParam);
|
||||
} catch (\Exception $e) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
|
||||
$treeData = $service->getPositionTree($dsdm, $examid, $bmid, $userid, (string)$aa, $cookies);
|
||||
|
||||
$zwdmList = [];
|
||||
@@ -339,48 +263,20 @@ class Crawler extends BaseController
|
||||
]);
|
||||
}
|
||||
|
||||
if (empty($cookiesParam)) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => '请填写Cookie数据',
|
||||
]);
|
||||
}
|
||||
|
||||
// 解析JSON格式的cookies
|
||||
$cookies = is_string($cookiesParam) ? json_decode($cookiesParam, true) : $cookiesParam;
|
||||
if (json_last_error() !== JSON_ERROR_NONE || empty($cookies)) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => 'Cookie数据格式错误,请检查JSON格式',
|
||||
]);
|
||||
}
|
||||
|
||||
$service = new CrawlerService();
|
||||
try {
|
||||
$cookies = $service->parseCookies($cookiesParam);
|
||||
} catch (\Exception $e) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
|
||||
$info = $service->getPositionInfo($zwdm, $examid, $cookies);
|
||||
|
||||
if (!empty($info)) {
|
||||
// 处理单条数据或数组数据
|
||||
if (isset($info[0])) {
|
||||
$item = $info[0];
|
||||
} else {
|
||||
$item = $info;
|
||||
}
|
||||
|
||||
// 计算竞争比(格式:招聘人数:审核通过人数)
|
||||
$zprs = isset($item['zprs']) ? intval($item['zprs']) : 0;
|
||||
$bkrs = isset($item['bkrs']) ? intval($item['bkrs']) : 0;
|
||||
$competitionRatio = $zprs > 0 && $bkrs > 0 ? $zprs . ':' . $bkrs : ($zprs > 0 ? $zprs . ':0' : '0:0');
|
||||
|
||||
$result = [
|
||||
'sbmc' => $item['sbmc'] ?? '', // 省份
|
||||
'dsmc' => $item['dsmc'] ?? '', // 地区
|
||||
'zpdwmc' => $item['zpdwmc'] ?? '', // 招聘单位/用人司局
|
||||
'zwmc' => $item['zwmc'] ?? '', // 职位名称
|
||||
'zwdm' => $item['zwdm'] ?? $zwdm, // 职位代码
|
||||
'zprs' => $zprs, // 招聘人数
|
||||
'bkrs' => $bkrs, // 审核通过人数
|
||||
'competition_ratio' => $competitionRatio, // 竞争比(格式:招聘人数:审核通过人数)
|
||||
];
|
||||
$result = $service->formatPositionInfo($info, $zwdm);
|
||||
|
||||
return json([
|
||||
'code' => 1,
|
||||
@@ -428,23 +324,16 @@ class Crawler extends BaseController
|
||||
]);
|
||||
}
|
||||
|
||||
if (empty($cookiesParam)) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => '请填写Cookie数据',
|
||||
]);
|
||||
}
|
||||
|
||||
// 解析JSON格式的cookies
|
||||
$cookies = is_string($cookiesParam) ? json_decode($cookiesParam, true) : $cookiesParam;
|
||||
if (json_last_error() !== JSON_ERROR_NONE || empty($cookies)) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => 'Cookie数据格式错误,请检查JSON格式',
|
||||
]);
|
||||
}
|
||||
|
||||
$service = new CrawlerService();
|
||||
try {
|
||||
$cookies = $service->parseCookies($cookiesParam);
|
||||
} catch (\Exception $e) {
|
||||
return json([
|
||||
'code' => 0,
|
||||
'msg' => $e->getMessage(),
|
||||
]);
|
||||
}
|
||||
|
||||
$results = $service->batchGetPositionInfo($zwdmList, $examid, $cookies);
|
||||
|
||||
return json([
|
||||
|
||||
Reference in New Issue
Block a user