123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?php
- namespace App\Tools;
- use App\Constants\ErrorCode;
- class Result
- {
- public static function success($data = [])
- {
- return static::result(ErrorCode::SUCCESS, ErrorCode::getMessage(ErrorCode::SUCCESS), $data);
- }
- public static function error($message = '', $code = ErrorCode::ERROR, $data = [])
- {
- if (empty($message)) {
- return static::result($code, ErrorCode::getMessage($code), $data);
- } else {
- return static::result($code, $message, $data);
- }
- }
- protected static function result($code, $message, $data)
- {
- return [
- 'code' => $code,
- 'message' => $message,
- 'data' => $data,
- ];
- }
- //判断连接是否正确
- public static function pageExists($url) {
- $ch = curl_init();
- // 设置 cURL 选项
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回响应作为字符串,而不是直接输出
- curl_setopt($ch, CURLOPT_NOBODY, false); // 如果你想检查内容,设置为 false
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 允许重定向
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 100); // 设置连接超时时间
- curl_setopt($ch, CURLOPT_TIMEOUT, 200); // 设置读取数据的超时时间
- curl_setopt($ch, CURLOPT_FAILONERROR, true); // 在发生错误时返回 FALSE
- curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'); // 设置用户代理,模拟浏览器请求
- // 执行 cURL 请求
- $response = curl_exec($ch);
- // 检查是否有 cURL 错误发生
- if (curl_errno($ch)) {
- curl_close($ch);
- return false;
- }
- // 获取 HTTP 状态码
- $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
- // 关闭 cURL
- curl_close($ch);
- // 判断 HTTP 状态码是否在 200-299 范围内(表示成功)
- // 或者你可以根据需要调整这个范围,比如包括 301, 302 重定向等
- return $httpCode;
- }
- public static function http_get($url)
- {
- $oCurl = curl_init();
- if (stripos($url, "https://") !== false) {
- curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
- curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
- }
- curl_setopt($oCurl, CURLOPT_URL, $url);
- curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
- $sContent = curl_exec($oCurl);
- $aStatus = curl_getinfo($oCurl);
- curl_close($oCurl);
- if (intval($aStatus["http_code"]) == 200) {
- return $sContent;
- } else {
- return false;
- }
- }
- /**
- * POST 请求
- * @param string $url
- * @param array $param
- * @param boolean $post_file 是否文件上传
- * @return string content
- */
- public static function http_post($url, $data, $options = [])
- {
- // 初始化CURL会话
- $ch = curl_init($url);
- // 设置CURL选项
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
- curl_setopt($ch, CURLOPT_HEADER, false); // 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
- curl_setopt($ch, CURLOPT_POST, true); // 发送一个常规的POST请求。
- curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); // 要传递的POST数据,这里使用http_build_query将数组转换为URL编码的查询字符串。
- // 如果有额外的CURL选项,则合并它们
- if (!empty($options)) {
- curl_setopt_array($ch, $options);
- }
- // 执行CURL会话并获取响应
- $response = curl_exec($ch);
- // 检查是否有CURL错误
- if (curl_errno($ch)) {
- $error_msg = curl_error($ch);
- curl_close($ch);
- throw new Exception("CURL Error: $error_msg");
- }
- // 获取HTTP状态码
- $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
- // 关闭CURL会话
- curl_close($ch);
- // 返回一个包含响应和HTTP状态码的数组
- $responseBody = $response;
- $headerEnd = strpos($response, "\r\n\r\n");
- if ($headerEnd !== false) {
- // 去除响应头,只保留响应体
- $responseBody = substr($response, $headerEnd + 4); // +4 是因为 "\r\n\r\n" 有4个字符
- // echo $responseBody; // 输出:This is the response body.
- } else {
- // 如果没有找到空行,可能响应格式不正确或没有响应头
- // echo "No headers found in response.";
- }
- return [
- 'response' => $responseBody,
- 'http_code' => $http_code
- ];
- }
- }
|