全網開發都可搭建技術資料庫篇2_如何呼叫沒有文件說明搭建 Web API
我認為本文最重要的資訊並不是如何使用其他人沒有文件說明的 API。雖然很有趣,但是也有一些限制,而且我也不會經常這麼做。更重要的一點是,任何人都可以這麼訪問你後端的 API!每個人都有開發者工具和網路標籤,檢視你傳到後端的引數、修改它們都很容易。
因此如果一個人透過修改某些引數來獲取其他使用者的資訊,這不值得提倡。我認為提供公開 API 的大部分開發者們都知道,但是我之所以再提一次,是因為每個初學者都應該瞭解。: )
第四步:在 Python 中發請求
現在我們知道了我們需要哪些請求頭,我們可以把
curl
命令翻譯進 Python 程式!這部分是相當機械化的過程,目標僅僅是用 Python 傳送與 cUrl 相同的資料。
下面是程式碼例項。我們使用 Python 的
requests
包實現了與前面
curl
命令相同的功能。我把整個長請求分解成了元組的陣列,以便看起來更簡潔。
import requestsimport urllibdata = [ ('personId','101777723'), # I redacted these IDs a bit too ('personId','117533904'), ('personId','111526653'), ('personId','116731406'), ('extensionSet.extensionNames','HANGOUTS_ADDITIONAL_DATA'), ('extensionSet.extensionNames','HANGOUTS_OFF_NETWORK_GAIA_GET'), ('extensionSet.extensionNames','HANGOUTS_PHONE_DATA'), ('includedProfileStates','ADMIN_BLOCKED'), ('includedProfileStates','DELETED'), ('includedProfileStates','PRIVATE_PROFILE'), ('mergedPersonSourceOptions.includeAffinity','CHAT_AUTOCOMPLETE'), ('coreIdParams.useRealtimeNotificationExpandedAcls','true'), ('requestMask.includeField.paths','person.email'), ('requestMask.includeField.paths','person.gender'), ('requestMask.includeField.paths','person.in_app_reachability'), ('requestMask.includeField.paths','person.metadata'), ('requestMask.includeField.paths','person.name'), ('requestMask.includeField.paths','person.phone'), ('requestMask.includeField.paths','person.photo'), ('requestMask.includeField.paths','person.read_only_profile_info'), ('requestMask.includeField.paths','person.organization'), ('requestMask.includeField.paths','person.location'), ('requestMask.includeField.paths','person.cover_photo'), ('requestMask.includeContainer','PROFILE'), ('requestMask.includeContainer','DOMAIN_PROFILE'), ('requestMask.includeContainer','CONTACT'), ('key','REDACTED')]response = requests.post('{ 'X-HTTP-Method-Override': 'GET', 'Authorization': 'SAPISIDHASH REDACTED', 'Content-Type': 'application/x-www-form-urlencoded', 'Origin': '}, data=urllib.parse.urlencode(data),)print(response.text)
我執行這個程式後正常執行 —— 輸出了一堆 JSON 資料!太棒了!
你會注意到有些地方我用
REDACTED
代替了,因為如果我把原始資料列出來你就可以用我的賬號來訪問谷歌論壇了,這就很不好了。
執行結束!
現在我可以隨意修改 Python 程式,比如傳入不同的引數,或解析結果等。
我不打算用它來做其他有意思的事了,因為我壓根對這個 API 沒興趣,我只是用它來闡述請求 API 的過程。
但是你確實可以對返回的一堆 JSON 做一些處理。
curlconverter 看起來很強大
有人評論說可以使用 https://curlconverter.com/ 自動把 curl 轉換成 Python(和一些其他的語言!),這看起來很神奇 —— 我都是手動轉的。我在這個例子裡使用了它,看起來一切正常。
追蹤 API 的處理過程並不容易
我不打算誇大追蹤 API 處理過程的難度 —— API 的處理過程並不明顯!我也不知道傳給這個谷歌論壇 API 的一堆引數都是做什麼的!
但是有一些引數看起來很直觀,比如
requestMask.includeField.paths=person.email
可能表示“包含每個人的郵件地址”。因此我只關心我能看懂的引數,不關心看不懂的。
(理論上)適用於所有場景
可能有人質疑 —— 這個方法適用於所有場景嗎?
答案是肯定的 —— 瀏覽器不是魔法!瀏覽器傳送給你的伺服器的所有資訊都是 HTTP 請求。因此如果我複製了瀏覽器傳送的所有的 HTTP 請求頭,那麼後端就會認為請求是從我的瀏覽器發出的,而不是用 Python 程式發出的。
當然,我們去掉了一些瀏覽器傳送的請求頭,因此理論上後端是可以識別出來請求是從瀏覽器還是 Python 程式發出的,但是它們通常不會檢查。
這裡有一些對讀者的告誡 —— 一些谷歌服務的後端會透過令人難以理解(對我來說是)方式跟前端通訊,因此即使理論上你可以模擬前端的請求,但實際上可能行不通。可能會遭受更多攻擊的大型 API 會有更多的保護措施。
我們已經知道了如何呼叫沒有文件說明的 API。現在我們再來聊聊可能遇到的問題。
問題 1:會話 cookie 過期
一個大問題是我用我的谷歌會話 cookie 作為身份認證,因此當我的瀏覽器會話過期後,這個指令碼就不能用了。
這意味著這種方式不能長久使用(我寧願調一個真正的 API),但是如果我只是要一次性快速抓取一小組資料,那麼可以使用它。
問題 2:濫用
如果我正在請求一個小網站,那麼我的 Python 指令碼可能會把服務打垮,因為請求數超出了它們的處理能力。因此我請求時儘量謹慎,儘量不過快地傳送大量請求。
這尤其重要,因為沒有官方 API 的網站往往是些小網站且沒有足夠的資源。
很明顯在這個例子中這不是問題 —— 我認為在寫這篇文章的過程我一共向谷歌論壇的後端傳送了 20 次請求,他們肯定可以處理。
如果你用自己的賬號身份過度訪問這個 API 並導致了故障,那麼你的賬號可能會被暫時封禁(情理之中)。
我只下載我自己的資料或公共的資料 —— 我的目的不是尋找網站的弱點。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69920392/viewspace-2877285/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 全網開發都可搭建技術資料庫篇2_如何呼叫沒有文件說明的 Web API資料庫WebAPI
- 全網開發都可搭建技術資料庫篇-如何看待LINUX和IOS兩個程式的使用體驗資料庫LinuxiOS
- 搭建Python爬取菠菜程式開發網頁搭建網站技術篇-在搭建Java中如何遍歷字串呢?Python網頁網站Java字串
- 全網開發網站搭建教程篇之Python 標準庫之 sys網站Python
- 資料庫技術初級考試說明 (轉)資料庫
- 全棧 – 10 資料庫 用MAMP和WAMP搭建Web環境全棧資料庫Web
- 全棧 - 10 資料庫 用MAMP和WAMP搭建Web環境全棧資料庫Web
- 有沒有完全自主的國產化資料庫技術資料庫
- USDT質押挖礦/系統開發說明/SUDT流動性挖礦技術開發搭建詳情
- 全棧式web開發技術-List全棧Web
- web開發框架技術有哪些?Web框架
- 本機web開發環境的搭建--nginx篇Web開發環境Nginx
- Moco環境搭建說明
- 沒有程式碼基礎,如何搭建攝影網站網站
- 產品資料管理(PDM)技術說明書
- EOS生態系統技術開發搭建
- 「積木庫」GraphQL技術搭建的無程式碼開發平臺
- linux系統資料庫開發環境搭建Linux資料庫開發環境
- RestEasy技術說明REST
- koa+mysql+vue+socket.io全棧開發之web api篇MySqlVue全棧WebAPI
- knife4j api文件使用說明API
- Defi mmm合約互助(智慧合約)系統說明丨mmm互助合約dapp開發技術搭建原理APP
- 技術人如何搭建自己的技術部落格
- NFT遊戲開發交易系統搭建技術遊戲開發
- NFT持幣生息系統開發技術搭建
- 如何理解Python web開發技術PythonWeb
- php專案框架搭建(一)【資料庫篇】BaseDAOPHP框架資料庫
- php專案框架搭建(二)【資料庫篇】ResultPHP框架資料庫
- 如何構建一個Web瀏覽器(1):技術說明規範Web瀏覽器
- swagger線上api文件搭建指南SwaggerAPI
- 用“MEAN”技術棧開發web應用(二)express搭建服務端框架WebExpress服務端框架
- 墨天輪最受DBA歡迎的資料庫技術文件-監控篇資料庫
- 墨天輪最受DBA歡迎的資料庫技術文件-巡檢篇資料庫
- TechFinger遊戲搬磚系統搭建開發技術遊戲
- PAX Gold(PAXG)質押系統搭建開發技術Go
- INTO社交算力挖礦系統搭建開發技術
- DAPP開發技術案例|DAPP原始碼搭建APP原始碼
- NFT盲盒商城遊戲系統開發技術搭建遊戲