第十四章-PHP與HTTP協議

第十四章-PHP與HTTP協議

一,HTTP 協議詳解

HTTP(HyperText Transfer Protocol,超文本傳輸協議)是互聯網上應用最廣泛的協議之一,用于客戶端(如瀏覽器)與服務器之間的通信。它是 Web 技術的基石,理解 HTTP 協議是開發 Web 應用的核心基礎。以下是 HTTP 協議的全面解析:


一、HTTP 協議基礎

1. 協議特性
  • 無狀態 (Stateless)
    每個 HTTP 請求相互獨立,服務器默認不保存客戶端狀態(如用戶登錄信息)。狀態管理需通過 Cookie、Session 或 Token 實現。
  • 基于請求-響應模型
    • 客戶端發送請求(Request) → 服務器返回響應(Response)。
    • 支持多種數據格式:HTML、JSON、XML、圖片、視頻等。
  • 靈活可擴展
    • 通過 HTTP 頭部(Headers) 擴展功能(如緩存控制、內容協商)。
    • 支持 HTTPS(HTTP + SSL/TLS)加密傳輸。
2. 協議版本
版本年份核心改進
HTTP/0.91991僅支持 GET 方法,返回純文本
HTTP/1.01996支持 MIME 類型、狀態碼、Header
HTTP/1.11999持久連接、管道化、Host 頭
HTTP/22015二進制協議、多路復用、頭部壓縮
HTTP/32022基于 QUIC 協議(UDP)、減少延遲

二、HTTP 消息結構

1. 請求(Request)
GET /index.html HTTP/1.1             # 請求行:方法 + 路徑 + 協議版本
Host: www.example.com                # 頭部字段(Headers)
User-Agent: Mozilla/5.0
Accept: text/html# 空行(分隔頭部和消息體)# 消息體(Body,GET 請求通常為空)
  • 請求方法 (Methods)

    方法用途冪等性
    GET獲取資源(參數在 URL)
    POST提交數據(參數在 Body)
    PUT更新完整資源
    DELETE刪除資源
    PATCH更新部分資源
    HEAD獲取響應頭(無 Body)
    OPTIONS查詢服務器支持的通信選項
2. 響應(Response)
HTTP/1.1 200 OK                       # 狀態行:協議版本 + 狀態碼 + 狀態描述
Content-Type: text/html               # 頭部字段(Headers)
Content-Length: 1234
Date: Mon, 01 Jan 2024 12:00:00 GMT# 空行
<!DOCTYPE html>                       # 消息體(Body)
<html>...</html>
  • 狀態碼 (Status Codes)

    狀態碼類別常見示例
    1xx信息響應100(繼續)
    2xx成功200(OK)、201(Created)
    3xx重定向301(永久重定向)、304(未修改)
    4xx客戶端錯誤400(錯誤請求)、403(禁止訪問)
    5xx服務端錯誤500(內部錯誤)、503(服務不可用)

三、核心機制詳解

1. 連接管理
  • 短連接 (HTTP/1.0)
    每次請求后關閉 TCP 連接,效率低。
  • 持久連接 (HTTP/1.1)
    • 默認保持 TCP 連接復用(Connection: keep-alive)。
    • 通過 Content-LengthTransfer-Encoding: chunked 處理動態內容。
  • 多路復用 (HTTP/2)
    單個 TCP 連接上并行傳輸多個請求/響應,解決隊頭阻塞問題。
2. 緩存機制
  • 強緩存
    • Cache-Control: max-age=3600:資源有效期 1 小時。
    • Expires: Mon, 01 Jan 2024 12:00:00 GMT(HTTP/1.0,已被取代)。
  • 協商緩存
    • Last-Modified + If-Modified-Since:基于時間戳。
    • ETag + If-None-Match:基于內容哈希值。
3. 內容協商

客戶端通過 Header 聲明偏好,服務器返回最合適的內容:

  • Accept: text/html, application/json(內容類型)
  • Accept-Language: en-US, zh-CN(語言)
  • Accept-Encoding: gzip, deflate(壓縮方式)
4. 安全機制
  • HTTPS

    • HTTP over SSL/TLS,加密傳輸數據。
    • 通過數字證書驗證服務器身份。
  • CORS (跨域資源共享)

    Access-Control-Allow-Origin: https://trusted-site.com
    Access-Control-Allow-Methods: GET, POST
    

四、HTTP 頭部關鍵字段

常用請求頭
字段用途
Host目標域名(HTTP/1.1 必需)
User-Agent客戶端標識(瀏覽器、操作系統)
Cookie發送服務器設置的 Cookie
Authorization認證憑證(如 Bearer <token>
Content-Type請求體的 MIME 類型(如 application/json
常用響應頭
字段用途
Set-Cookie設置客戶端的 Cookie
Location重定向目標 URL(配合 3xx 狀態碼)
Content-Encoding內容壓縮方式(如 gzip
Cache-Control緩存策略(如 no-cache
Content-Security-Policy防止 XSS 攻擊

二,常見的HTTP 響應設置

一、基礎響應設置

1. 設置 HTTP 狀態碼
// 直接設置狀態碼 (PHP >= 5.4)
http_response_code(404); // 返回 404 Not Found// 傳統方式(兼容舊版本)
header("HTTP/1.1 403 Forbidden");
2. 設置響應內容類型
// 返回 HTML
header('Content-Type: text/html; charset=utf-8');// 返回 JSON(API 開發必備)
header('Content-Type: application/json; charset=utf-8');// 返回純文本
header('Content-Type: text/plain');// 返回 XML
header('Content-Type: application/xml');

二、重定向與頁面跳轉

1. 基礎重定向
// 302 臨時重定向(默認)
header('Location: /new-page.php');
exit; // 必須立即終止腳本執行// 301 永久重定向
header('Location: /permanent-page.php', true, 301);
exit;
2. 延遲重定向
// 3 秒后跳轉
header('Refresh: 3; url=/target-page.php');
echo '即將跳轉,請稍候...';

三、緩存控制

1. 禁止瀏覽器緩存
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP/1.1
header('Pragma: no-cache'); // HTTP/1.0
header('Expires: 0'); // 代理服務器緩存
2. 設置資源緩存時間
// 緩存 1 小時(適用于靜態資源)
header('Cache-Control: public, max-age=3600');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');

四、文件操作相關

1. 文件下載
$filePath = '/path/to/file.zip';header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');
header('Content-Length: ' . filesize($filePath));readfile($filePath);
exit;
2. 斷點續傳支持
header('Accept-Ranges: bytes');
header('Content-Length: ' . filesize($filePath));

五、安全相關頭部

1. 防止點擊劫持
header('X-Frame-Options: DENY'); // 或 SAMEORIGIN
2. 內容安全策略(CSP)
header("Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com");
3. 禁用 MIME 類型嗅探
header('X-Content-Type-Options: nosniff');

六、跨域資源共享(CORS)

1. 簡單跨域請求
header('Access-Control-Allow-Origin: *'); // 允許所有域名(慎用)
header('Access-Control-Allow-Origin: https://trusted-site.com'); // 指定域名
2. 預檢請求處理
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');header('Access-Control-Allow-Headers: Content-Type, Authorization');header('Access-Control-Max-Age: 86400'); // 緩存預檢結果 24 小時exit;
}

七、Cookie 操作

1. 設置 Cookie
setcookie('user_token',          // Cookie 名稱'abc123xyz',           // 值time() + 3600,         // 過期時間(1 小時)'/',                   // 有效路徑'.example.com',        // 域名(支持子域名)true,                  // 僅 HTTPS 傳輸true                   // 禁止 JavaScript 訪問(HttpOnly)
);
2. 刪除 Cookie
setcookie('user_token', '', time() - 3600, '/', '.example.com', true, true);

八、高級場景示例

1. 構建 JSON API
try {$data = ['status' => 'success', 'data' => fetchData()];http_response_code(200);
} catch (Exception $e) {$data = ['status' => 'error', 'message' => $e->getMessage()];http_response_code(500);
}header('Content-Type: application/json');
echo json_encode($data, JSON_UNESCAPED_UNICODE);
exit;
2. 強制下載大文件(內存優化)
$file = fopen('large-file.iso', 'rb');header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="large-file.iso"');while (!feof($file)) {echo fread($file, 8192); // 分塊輸出ob_flush();flush();
}fclose($file);
exit;

關鍵注意事項

  1. 輸出順序問題

    • 所有 header() 調用必須在任何實際輸出(包括空格和空行)之前
    • 使用 ob_start() 開啟輸出緩沖可避免報錯
  2. 編碼一致性

    header('Content-Type: text/html; charset=utf-8');
    // 同時設置 PHP 內部編碼
    mb_internal_encoding('UTF-8');
    
  3. 性能優化

    • 避免頻繁設置重復頭部
    • 使用 header_remove() 清除不需要的默認頭部
  4. 安全防護

    • 敏感操作后立即調用 session_regenerate_id()
    • 使用 header('X-XSS-Protection: 1; mode=block') 啟用瀏覽器 XSS 過濾

三, PHP模擬 HTTP 請求

一、使用 file_get_contents() 發送請求

適用于簡單 GET/POST 請求,需開啟 allow_url_fopen 配置。

1. 發送 GET 請求
$url = 'https://api.example.com/data?param1=value1&param2=value2';
$response = file_get_contents($url);
echo $response;
2. 發送 POST 請求(表單數據)
$url = 'https://api.example.com/submit';
$data = ['key1' => 'value1', 'key2' => 'value2'];$options = ['http' => ['method' => 'POST','header' => 'Content-Type: application/x-www-form-urlencoded','content' => http_build_query($data)]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;
3. 發送 POST 請求(JSON 數據)
$url = 'https://api.example.com/submit';
$data = json_encode(['name' => 'Alice', 'age' => 30]);$options = ['http' => ['method' => 'POST','header' => "Content-Type: application/json\r\n",'content' => $data]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;

二、使用 cURL 擴展

功能更強大,支持 HTTPS、頭部設置、文件上傳等。

1. 基礎 GET 請求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.example.com/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回響應內容
$response = curl_exec($ch);
curl_close($ch);
echo $response;
2. 發送 POST 請求(表單數據)
$url = 'https://api.example.com/submit';
$data = ['username' => 'test', 'password' => '123456'];$ch = curl_init();
curl_setopt_array($ch, [CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => true,CURLOPT_POST => true,CURLOPT_POSTFIELDS => http_build_query($data),CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded']
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
3. 發送 POST 請求(JSON 數據)
$url = 'https://api.example.com/submit';
$data = json_encode(['title' => 'Test', 'content' => 'Hello World']);$ch = curl_init();
curl_setopt_array($ch, [CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => true,CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data,CURLOPT_HTTPHEADER => ['Content-Type: application/json','Authorization: Bearer abc123xyz']
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

三、處理 HTTPS 與 SSL 驗證

1. 忽略 SSL 證書驗證(僅限測試環境)
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
2. 指定 CA 證書
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem');

四、文件上傳

$filePath = '/path/to/file.jpg';
$data = ['file' => new CURLFile($filePath, 'image/jpeg', 'photo.jpg'),'description' => 'My photo'
];$ch = curl_init();
curl_setopt_array($ch, [CURLOPT_URL => 'https://api.example.com/upload',CURLOPT_POST => true,CURLOPT_POSTFIELDS => $data,CURLOPT_RETURNTRANSFER => true
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;

五、處理 Cookies

1. 發送時攜帶 Cookies
curl_setopt($ch, CURLOPT_COOKIE, 'session_id=abc123; user_token=xyz789');
2. 保存響應 Cookies
curl_setopt($ch, CURLOPT_COOKIEJAR, '/path/to/cookies.txt'); // 保存到文件
curl_setopt($ch, CURLOPT_COOKIEFILE, '/path/to/cookies.txt'); // 讀取 Cookies

六、高級配置

1. 設置超時時間
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 30 秒超時
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // 連接超時 10 秒
2. 處理重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自動跟隨重定向
curl_setopt($ch, CURLOPT_MAXREDIRS, 5); // 最大重定向次數
3. 獲取響應頭信息
curl_setopt($ch, CURLOPT_HEADER, true); // 包含頭信息在輸出中$response = curl_exec($ch);
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headers = substr($response, 0, $headerSize);
$body = substr($response, $headerSize);echo "Headers:\n$headers\nBody:\n$body";

七、錯誤處理

$ch = curl_init();
// ... 設置選項 ...$response = curl_exec($ch);
if ($response === false) {$error = curl_error($ch);$errno = curl_errno($ch);echo "cURL 錯誤 ($errno): $error";
} else {$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);echo "HTTP 狀態碼: $httpCode\n響應內容:\n$response";
}
curl_close($ch);

八、完整示例:調用 REST API

function callApi($url, $method = 'GET', $data = null, $headers = []) {$ch = curl_init();$options = [CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => true,CURLOPT_CUSTOMREQUEST => strtoupper($method),CURLOPT_HTTPHEADER => $headers];if ($method !== 'GET' && $data !== null) {$options[CURLOPT_POSTFIELDS] = is_array($data) ? json_encode($data) : $data;}curl_setopt_array($ch, $options);$response = curl_exec($ch);$error = curl_error($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);return ['code' => $httpCode,'data' => json_decode($response, true),'error' => $error];
}// 調用示例
$result = callApi('https://api.example.com/users','POST',['name' => 'Alice', 'email' => 'alice@example.com'],['Content-Type: application/json', 'Authorization: Bearer token123']
);print_r($result);

注意事項

  1. 安全建議
    • 生產環境務必啟用 SSL 證書驗證
    • 敏感數據(如 API 密鑰)不要硬編碼在代碼中
    • 對用戶輸入做嚴格過濾
  2. 性能優化
    • 復用 cURL 句柄(使用 curl_init() 一次,多次請求)
    • 設置合理的超時時間
  3. 第三方庫推薦
    如需更復雜功能,可使用:
    • Guzzle HTTPcomposer require guzzlehttp/guzzle
    • Symfony HTTP Clientcomposer require symfony/http-client

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77552.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77552.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77552.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

刀客獨家 | 潘勝接管百度移動生態市場部

一、 據刀客doc向獨家信源確認&#xff0c;百度移動生態事業群&#xff08;MEG&#xff09;市場部日前完成重要人事調整&#xff1a;潘勝已經接任市場負責人。 此前&#xff0c;根據雷鋒網3月底的報道&#xff0c;百度云渠道生態總經理陳之若離職&#xff0c;原移動生態事業群…

Springoot、Flowable快速學習

應用背景&#xff1a; 公司打算做個考勤系統&#xff0c;涉及到請假、補卡之類的流程審批。想到了工作流&#xff0c;gitee、github上看了下開源的&#xff0c;有自研的和常見的Flowable?、Activiti?。首先放棄自研的&#xff0c;考慮到成熟度、社區生態&#xff0c;最后選擇…

關于 【Spring Boot Configuration Annotation Processor 未配置問題】 的詳細分析、解決方案及代碼示例

以下是關于 Spring Boot Configuration Annotation Processor 未配置問題 的詳細分析、解決方案及代碼示例&#xff1a; 1. 問題描述 當使用 Spring Boot 的配置注解&#xff08;如 ConfigurationProperties、Value、ConditionalOnProperty 等&#xff09;時&#xff0c;若未…

Spring系列四:AOP切面編程 第一部分

AOP切面編程 &#x1f497;AOP-官方文檔&#x1f35d;AOP 講解&#x1f35d;AOP APIs &#x1f497;動態代理&#x1f35d;初探動態代理&#x1f35d;動態代理深入&#x1f35d;AOP問題提出&#x1f4d7;使用土方法解決&#x1f4d7; 對土方法解耦-開發最簡單的AOP類&#x1f4…

【云計算】云計算中IaaS、PaaS、SaaS介紹

0 隨著云計算、大數據、人工智能發展迅速,布局“云”已經是互聯網企業共識。云計算的服務類型分為三種,分別為IaaS、PaaS、SaaS,這三個分別是什么意思,今天做一個簡單的介紹和了解。 一、云計算 云計算是用戶需求通過Internet獲取計算資源,把計算資源包裝成服務,提供給…

使用HYPRE庫并行裝配IJ稀疏矩陣指南: 矩陣預分配和重復利用

使用HYPRE庫并行裝配IJ稀疏矩陣指南 HYPRE是一個流行的并行求解器庫&#xff0c;特別適合大規模稀疏線性系統的求解。下面介紹如何并行裝配IJ格式的稀疏矩陣&#xff0c;包括預先分配矩陣空間和循環使用。 1. 初始化矩陣 首先需要創建并初始化一個IJ矩陣&#xff1a; #incl…

目標跟蹤最新文章閱讀列表

AAAI2025 TrackFormer: Multi-Object Tracking with Transformers 論文:https://arxiv.org/abs/2101.02702 代碼:https://github.com/timmeinhardt/trackformer AAAI2025 SUTrack 單目標跟蹤 論文:https://pan.baidu.com/s/10cR4tQt3lSH5V2RNf7-3gg?pwd=pks2 代碼:htt…

分布式GPU上計算長向量模的方法

分布式GPU上計算長向量模的方法 當向量分布在多個GPU卡上時&#xff0c;計算向量模(2-范數)需要以下步驟&#xff1a; 在每個GPU上計算本地數據的平方和跨GPU通信匯總所有平方和在根GPU上計算總和的平方根 實現方法 下面是一個完整的CUDA示例代碼&#xff0c;使用NCCL進行多…

高并發下單庫存扣減異常?飛算 JavaAI 自動化生成分布式事務解決方案

在電商、旅游等行業業務量激增&#xff0c;高并發下單場景中&#xff0c;傳統庫存扣減方式弊端盡顯。超賣問題因缺乏有效并發控制機制頻發&#xff0c;多個訂單同時訪問庫存數據&#xff0c;導致同一商品多次售出&#xff0c;訂單無法履約引發客戶投訴&#xff1b;同時&#xf…

MVCWebAPI使用FromBody接受對象的方法

近期在做軟件升級操作的時候突然想著需要的參數比較多&#xff0c;如果需要參數的話參數比較多&#xff0c;所有想著使用frombody來集合數據統一操作做了個樣張希望對您有幫助 代碼如下&#xff1a; /// <summary>/// 入口當前文件接口下的操作數據/// </summary>/…

Atlas 800I A2 離線部署 DeepSeek-R1-Distill-Llama-70B

一、環境信息 1.1、硬件信息 Atlas 800I A2 1.2、環境信息 注意&#xff1a;這里驅動固件最好用商業版&#xff0c;我這里用的社區版有點小問題 操作系統&#xff1a;openEuler 22.03 LTS NPU驅動&#xff1a;Ascend-hdk-910b-npu-driver_24.1.rc3_linux-aarch64.run NPU固…

NLP預處理:如何 處理表情符號

一、說明 本系列文總結了在NLP處理中&#xff0c;進行文本預處理的一些內容、步驟、處理工具包應用。本篇專門談論網上文章表情符號處理&#xff0c;對于初學者具有深刻學習和實驗指導意義。 二、介紹 表情符號已成為現代交流不可或缺的一部分&#xff0c;尤其是在社交媒體、…

C++/SDL 進階游戲開發 —— 雙人塔防(代號:村莊保衛戰 14)

&#x1f381;個人主頁&#xff1a;工藤新一 &#x1f50d;系列專欄&#xff1a;C面向對象&#xff08;類和對象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;終會照亮我前方的路 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 文章目錄 二…

解鎖空間數據新質生產力暨:AI(DeepSeek、ChatGPT)、Python、ArcGIS Pro多技術融合下的空間數據分析、建模與科研繪圖及論文寫作

人工智能&#xff08;AI&#xff09;與ArcGIS Pro的結合&#xff0c;為空間數據處理和分析開辟了前所未有的創新路徑。AI通過強大的數據挖掘、深度學習及自動化能力&#xff0c;可高效處理海量、多源、異構的空間數據&#xff0c;極大提升了分析效率與決策支持能力。而ArcGIS P…

18.2.go語言redis中使用lua腳本

在 Redis 中使用 Lua 腳本可以實現原子性操作、減少網絡開銷以及提高執行效率。 Redis 執行 Lua 腳本的原理 Redis 內置了 Lua 解釋器&#xff0c;能夠直接在服務器端執行 Lua 腳本。當執行 Lua 腳本時&#xff0c;Redis 會將腳本作為一個整體執行&#xff0c;保證腳本執行期…

?Unity_Demolition Media Hap (播放Hap格式視頻 超16K大分辨率視頻 流暢播放以及幀同步解決方案)

播放大分辨率視頻以及實現局域網視頻同步是許多開發者會遇到的需求,AVPro有一個 Ultra Edition版本,也能播放Hap格式視頻,之外就是Demolition Media Hap插件啦,實測即使是 7208*3808 大分辨率的視頻幀率還是能穩定在30幀,它能幫助我們輕松解決這些問題??。 一、插件概述 …

AI大模型知識與醫療項目實踐 - Java架構師面試實戰

AI大模型知識與醫療項目實踐 - Java架構師面試實戰 本文模擬了一場互聯網大廠的Java架構師面試&#xff0c;圍繞AI大模型知識、工具以及其在醫療項目中的實踐和趨勢展開討論。 第一輪提問 面試官&#xff1a; 馬架構&#xff0c;請您介紹一下AI大模型的基本概念及其在醫療領…

Windows 的文件系統不區分大小寫,Linux區分

在 Windows 系統中&#xff0c;文件系統默認是不區分大小寫的。這意味著在 Windows 上&#xff0c;文件名 ui_BalanceMeasureScreenUI.h 和 ui_balancemeasurescreenui.h 被視為同一個文件。因此&#xff0c;即使你在代碼中使用了不同的大小寫方式來引用同一個文件&#xff0c;…

Unity 資源合理性檢測

一&#xff1a;表格過度配置&#xff0c;表格資源是否在工程中存在&#xff0c;并輸出不存在的資源 import pandas as pd import glob import osassets [] count 0# 遍歷configs文件夾下所有xlsx文件 for file_path in glob.glob(configs/*.xlsx):count 1try:sheets pd.re…

Python爬蟲實戰:獲取高考資源網各學科精品復習資料

一、引言 高考資源網擁有豐富的高考復習資料,對于我們而言,獲取這些資源并整理分享能為考生提供有價值的幫助。然而,手動從網站查找和下載資源效率低且易出錯。利用 Python 爬蟲技術可實現自動化資源獲取,提高工作效率。但在爬取過程中,需考慮網站反爬機制,采取相應措施…