crosscheck自动登录脚本
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

190 lines
6.7 KiB

<?php
class mCrossCheck {
public $cookie_path = '';
public $loginfo = '';
/**
* 获取crosscheck账号密码
* @return array|bool
*/
public function getCrossCheckAccount(){
$ch = curl_init();
$domain = 'api.kuailelunwen.com';
$ip = '101.37.99.56';
$params = array(
'_uid' => '345d65ddcd3df70d',
'_token' => '6965268557309513',
'type' => '60',
);
// 快乐论文左侧导航“开放平台”添加请求IP白名单8.154.43.224
// 设置要访问的URL
curl_setopt($ch, CURLOPT_URL, "http://{$domain}/get_turnitin_account");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 设置CURLOPT_RESOLVE参数
// 格式:域名:端口:IP地址
//curl_setopt($ch, CURLOPT_RESOLVE, ["{$domain}:443:{$ip}"]);
curl_setopt($ch, CURLOPT_RESOLVE, ["{$domain}:80:{$ip}"]);
// HTTPS相关设置
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 正常验证主机名
// 传get参数
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
// 如果需要设置SNI(服务器名称指示)
curl_setopt($ch, CURLOPT_SSLKEY, "{$domain}");
// 执行请求
$response = curl_exec($ch);
print_r($response);
if (curl_errno($ch)) {
//echo 'cURL错误: ' . curl_error($ch);
return false;
} else {
// $info = curl_getinfo($ch);
// echo "实际连接IP: " . $info['primary_ip'] . "\n";
// echo "HTTP状态码: " . $info['http_code'] . "\n";
$res = json_decode($response, true);
if (!$res['status']) return false;
$list = $res['data'];
return $list;
}
curl_close($ch);
}
/**
* 检查crosscheck账号cookie是否有效
* @return bool
*/
public function islogin() {
$curl_headers = [
'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,ar;q=0.8',
'cache-control: max-age=0',
'priority: u=0, i',
'sec-ch-ua: "Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"',
'sec-ch-ua-mobile: ?0',
'sec-ch-ua-platform: "Windows"',
'sec-fetch-dest: document',
'sec-fetch-mode: navigate',
'sec-fetch-site: none',
'sec-fetch-user: ?1',
'upgrade-insecure-requests: 1',
'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36'
];
$url = 'https://external-production.au.turnitin.com/sms-namespace/sms/sms-serviceName/admin-console-server/sessions';
$jsonres = $this->requestUrlGet($url,[],$curl_headers);
// {"success":false,"status":401,"reason":"Failed to provide authorization token","message":"AdminException.AdminException"}
// {"success":true}
//var_dump($jsonres);
$res = json_decode($jsonres, true);
//print_r($res);
if ($res['success'] != true) return false;
return true;
}
/**
* curl GET 请求
* @param string $url
* @param array $data
* @param array $headers
* @param number $timeout
*/
private function requestUrlGet($url, $data=array(), $headers=array(), $timeout=100) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, false);
$ssl = substr($url, 0, 8) == 'https://' ? true : false;
if ($ssl) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
if(!empty($headers)) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_path);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
$result = curl_exec($ch);
curl_close($ch);
if ($result !== false) return $result;
return false;
}
/**
* curl POST请求
* @param string $url
* @param array $data
* @param array $headers
* @param number $timeout
*/
private function requestUrlPost($url, $data, $headers=array(), $timeout=300) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$ssl = substr($url, 0, 8) == 'https://' ? true : false;
if ($ssl) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
}
//if($this->part_cookie) curl_setopt($ch, CURLOPT_COOKIE, $this->part_cookie);
if ($this->cookie_path) {
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_path);
}
curl_setopt($ch, CURLOPT_HEADER, true);
if(!empty($headers)) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 100);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_NOBODY, false);
$result = curl_exec($ch);
curl_close($ch);
if (file_exists($this->cookie_path)) {
chown($this->cookie_path, 'nobody');
chgrp($this->cookie_path, 'nobody');
}
if ($result !== false) return $result;
return false;
}
}