最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python調(diào)用API的常用方式解析

 更新時(shí)間:2025年05月09日 11:10:10   作者:看海的四叔  
在數(shù)據(jù)開(kāi)發(fā)中,調(diào)用API是連接外部服務(wù)、獲取數(shù)據(jù)或?qū)崿F(xiàn)系統(tǒng)集成的核心方式之一,最近由于阿里云ODPS安全限制問(wèn)題,處理了一批API調(diào)用的任務(wù),所以從原理、案例和優(yōu)缺點(diǎn)等維度,寫(xiě)一寫(xiě)python調(diào)用API的常用方式介紹,需要的朋友可以參考下

一、引言

在數(shù)據(jù)開(kāi)發(fā)中,調(diào)用API是連接外部服務(wù)、獲取數(shù)據(jù)或?qū)崿F(xiàn)系統(tǒng)集成的核心方式之一。
最近由于阿里云ODPS安全限制問(wèn)題,處理了一批API調(diào)用的任務(wù),所以從原理、案例和優(yōu)缺點(diǎn)等維度,寫(xiě)一寫(xiě)python調(diào)用API的常用方式介紹。

二、常用方式介紹

Python調(diào)用API的主要方法可分為以下四類(lèi),每種方式的特點(diǎn)和適用場(chǎng)景有些許差異:

方法原理適用場(chǎng)景
requests基于HTTP的第三方庫(kù),封裝GET/POST等請(qǐng)求方法,提供簡(jiǎn)潔的API調(diào)用接口。常規(guī)HTTP請(qǐng)求、快速開(kāi)發(fā)、數(shù)據(jù)交互
http.clientPython內(nèi)置HTTP庫(kù),需手動(dòng)構(gòu)建請(qǐng)求頭和報(bào)文,精細(xì)控制請(qǐng)求的場(chǎng)景。低層級(jí)操作、兼容性要求高
urllib標(biāo)準(zhǔn)庫(kù)模塊,包含urllib.request等子模塊,基礎(chǔ)核心。簡(jiǎn)單請(qǐng)求、無(wú)需依賴(lài)第三方庫(kù)的場(chǎng)景
aiohttp基于異步IO的HTTP庫(kù),通過(guò)協(xié)程實(shí)現(xiàn)非阻塞請(qǐng)求,適用高并發(fā)場(chǎng)景。異步編程、高并發(fā)API調(diào)用

三、實(shí)現(xiàn)與案例

1.requests

  • ?原理?:通過(guò)封裝HTTP請(qǐng)求方法,簡(jiǎn)化參數(shù)傳遞和響應(yīng)處理,自動(dòng)處理URL編碼、連接池管理和響應(yīng)解析,支持JSON解析、Session會(huì)話(huà)、文件上傳等功能。
  • 優(yōu)點(diǎn)?:代碼簡(jiǎn)潔、功能全面
  • 缺點(diǎn)?:請(qǐng)求IO密集型場(chǎng)景效率較低
import requests

def get_github_user(username):
    """
    使用requests庫(kù)調(diào)用GitHub API獲取用戶(hù)信息
    """
    # 構(gòu)造API請(qǐng)求
    url = f"https://api.github.com/users/{username}"
    
    try:
        # 發(fā)送GET請(qǐng)求(自動(dòng)處理連接和關(guān)閉)
        response = requests.get(url, timeout=5)
        
        # 檢查HTTP狀態(tài)碼
        if response.status_code == 200:
            # 解析JSON響應(yīng)數(shù)據(jù)
            user_data = response.json()
            return {
                "name": user_data.get("name"),
                "location": user_data.get("location"),
                "public_repos": user_data.get("public_repos")
            }
        else:
            print(f"請(qǐng)求失敗,狀態(tài)碼:{response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"請(qǐng)求異常:{str(e)}")

# 調(diào)用示例
if __name__ == "__main__":
    print(get_github_user("octocat"))  # GitHub官方測(cè)試賬號(hào)

2.http.client

  • 原理?:內(nèi)置的底層HTTP客戶(hù)端庫(kù),手動(dòng)管理連接生命周期和報(bào)文頭構(gòu)造,適合需要精細(xì)控制HTTP協(xié)議的場(chǎng)景
  • 優(yōu)點(diǎn)?:直接可用、細(xì)粒度控制
  • 缺點(diǎn)?:代碼冗長(zhǎng)、需手動(dòng)處理編碼和連接
import http.client
import json

def get_httpbin_data():
    """
    使用http.client獲取httpbin測(cè)試數(shù)據(jù)
    """
    # 創(chuàng)建對(duì)象
    conn = http.client.HTTPSConnection("httpbin.org")
    try:
        # 發(fā)送GET請(qǐng)求
        conn.request("GET", "/get")
        # 獲取響應(yīng)對(duì)象
        response = conn.getresponse()
        # 讀取響應(yīng)體并解碼
        data = response.read().decode('utf-8')
        # 解析JSON數(shù)據(jù)
        return json.loads(data)
    except Exception as e:
        print(f"請(qǐng)求異常:{str(e)}")
    finally:
        # 必須手動(dòng)關(guān)閉連接
        conn.close()

# 調(diào)用示例
if __name__ == "__main__":
    print(get_httpbin_data())
    

3.urllib(輕量級(jí)方案)

  • 原理?:復(fù)合型HTTP工具,集成request/error/parse等模塊,適合簡(jiǎn)單請(qǐng)求和無(wú)需依賴(lài)的環(huán)境
  • 優(yōu)點(diǎn)?:輕量級(jí)
  • 缺點(diǎn)?:接口設(shè)計(jì)分散、缺少高級(jí)功能
from urllib.request import urlopen
import json

def get_user_agent():
    """
    使用urllib獲取客戶(hù)端UA信息
    """
    url = "http://httpbin.org/user-agent"
    try:
        # 打開(kāi)連接,自動(dòng)處理HTTP/HTTPS
        with urlopen(url, timeout=5) as response:
            # 讀取并解析JSON數(shù)據(jù)
            return json.loads(response.read().decode())
    except Exception as e:
        print(f"請(qǐng)求異常:{str(e)}")

# 調(diào)用示例
if __name__ == "__main__":
    print(get_user_agent())
    

4.aiohttp(異步方案)

  • 原理?:基于asyncio的異步HTTP客戶(hù)端,使用協(xié)程實(shí)現(xiàn)非阻塞IO操作,適合高并發(fā)場(chǎng)景(如爬蟲(chóng)、實(shí)時(shí)系統(tǒng))
  • ?優(yōu)點(diǎn)?:高吞吐量、資源利用率高
  • 缺點(diǎn)?:需要異步編程知識(shí)、調(diào)試復(fù)雜度高
import aiohttp
import asyncio

async def fetch_concurrent_data():
    """
    使用aiohttp并發(fā)獲取多個(gè)API數(shù)據(jù)
    """
    urls = [
        "https://jsonplaceholder.typicode.com/posts/1",
        "https://jsonplaceholder.typicode.com/comments/1"
    ]
    
    # 創(chuàng)建共享會(huì)話(huà)(自動(dòng)管理連接池)
    async with aiohttp.ClientSession() as session:
        tasks = []
        for url in urls:
            # 創(chuàng)建并發(fā)任務(wù)
            task = asyncio.create_task(
                session.get(url, timeout=aiohttp.ClientTimeout(total=3))
            )
            tasks.append(task)
        
        # 等待所有任務(wù)完成
        responses = await asyncio.gather(*tasks)
        
        results = []
        for response in responses:
            # 檢查響應(yīng)狀態(tài)
            if response.status == 200:
                data = await response.json()
                results.append(data)
        return results

# 調(diào)用示例
if __name__ == "__main__":
    print(asyncio.run(fetch_concurrent_data()))

四、總結(jié)對(duì)比

方法適用場(chǎng)景性能表現(xiàn)難度
requests常規(guī)REST API調(diào)用★★★★☆簡(jiǎn)單
http.client底層協(xié)議控制★★☆☆☆中等
urllib簡(jiǎn)單請(qǐng)求/無(wú)依賴(lài)環(huán)境★★★☆☆簡(jiǎn)單
aiohttp高并發(fā)/異步任務(wù)★★★★★復(fù)雜

到此這篇關(guān)于Python調(diào)用API的常用方式解析的文章就介紹到這了,更多相關(guān)Python調(diào)用API方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

米泉市| 鄂托克旗| 扶风县| 东乌珠穆沁旗| 大宁县| 林西县| 定安县| 满洲里市| 长乐市| 沂水县| 榆林市| 普定县| 门源| 英吉沙县| 江阴市| 唐海县| 开远市| 竹溪县| 睢宁县| 察隅县| 阳新县| 蚌埠市| 苗栗县| 沈丘县| 溧水县| 山阳县| 都匀市| 阿鲁科尔沁旗| 南雄市| 巴彦县| 甘谷县| 镇巴县| 福建省| 凌云县| 福安市| 桑植县| 林西县| 怀宁县| 永安市| 寿宁县| 增城市|