最後更新日期:2025 年 03 月 23 日
Table of Contents
用途
1、取得網頁原始碼
2、類似 Postman 的 API Client
3、其他 HTTP i請求
安裝
<span class="line"><span style="color: #D8DEE9FF">pip install requests</span></span>範例程式碼
1、用 GET 方法取得網頁原始碼
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> requests</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">response </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> requests</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">https://udn.com</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9">;</span></span>
<span class="line"><span style="color: #616E88"># 也可以用這種方式,功能完全相同</span></span>
<span class="line"><span style="color: #616E88"># response = requests.request('GET', 'https://udn.com')</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># 列出網頁內容文字</span></span>
<span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">response</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">text</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># 列出 HTTP 狀態碼</span></span>
<span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">response</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">status_code</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># 列出網頁編碼</span></span>
<span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">response</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">encoding</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># 列出 Response Header </span></span>
<span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">response</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">headers</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>2、在 GET 請求中加入 url 參數
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> requests</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">params </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">q</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">python</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">start</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">response </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> requests</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">https://google.com/search</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">params</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">params</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># 列出請求的 url 位址</span></span>
<span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">response</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">url</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>3、在 api 請求中,加入 headers 參數
比較常用的是
1、指定認證用的 Token
2、說明要送出的資料型態為 json
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> requests</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">url </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">http://apidemo.kirin.app/api/categories</span><span style="color: #ECEFF4">'</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">headers </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">Authorization</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">Bearer <你的Token></span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">Content-Type</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">application/json</span><span style="color: #ECEFF4">'</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">response </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> requests</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">url</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">headers</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">headers</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">response</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">text</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>4、處理 api 取得的 json 資料
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> requests</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">url </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">http://apidemo.kirin.app/api/categories/1</span><span style="color: #ECEFF4">'</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">response </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> requests</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">url</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">headers</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">headers</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">response</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">text</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># 把 json 字串,轉成 array 或 dict</span></span>
<span class="line"><span style="color: #D8DEE9FF">category </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> response</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">json</span><span style="color: #ECEFF4">()</span></span>
<span class="line"><span style="color: #616E88"># 這樣就可以存取其中的元素</span></span>
<span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">category</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">name</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">])</span></span>5、使用 POST 方法新增表單 (F資料
這是模擬表單送出的狀況,但是,通常會遇到 CSRF 的問題而被伺服端拒絕,除非伺服端不做 CSRF 的確認。
表單欄位的資料會以字典 (Dictionary) 的型式指定給 data 參數。
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> requests</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">url </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">https://apidemo.kirin.app/api/contacts</span><span style="color: #ECEFF4">'</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">headers </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">Authorization</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">Bearer <你的Token></span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">payload </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">name</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">John</span><span style="color: #ECEFF4">"</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">phone</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">0911222333</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">response </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> requests</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">post</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">url</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">headers</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">headers</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">data</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">payload</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">response</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">text</span><span style="color: #ECEFF4">)</span></span>6、使用 POST 方法新增 json 資料
要注意的地方有 2 個:
1、在 headers 中加入 'Content-Type':'application/json'
2、要傳送的資料,要用 json.dumps() 處理
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> requests</span></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> json</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">url </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">http://localhost/api/v1/ssac/tenders/lab</span><span style="color: #ECEFF4">'</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">headers </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">Authorization</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">Bearer <你的Tonek></span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">Content-Type</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">application/json</span><span style="color: #ECEFF4">'</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">payload </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">[{</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">name</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">John</span><span style="color: #ECEFF4">"</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">phone</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">0911222333</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">},</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">name</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">Mary</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">phone</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">0922333444</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">}]</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">response </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> requests</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">post</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">url</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">headers</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">headers</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">data</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">json</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">dumps</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">payload</span><span style="color: #ECEFF4">))</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">response</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">text</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>參考資料
https://ithelp.ithome.com.tw/articles/10220161
https://www.youtube.com/playlist?list=PLQKDzuA2cCjoVnT8bnbCGNZvJxwYtRbKu
https://www.youtube.com/watch?v=j4zfEisXsP4&list=PL8VzFQ8k4U1L5QpSapVEzoSfob-4CR8zM&index=66
Comments