我正在學習aiohttp使用 Python 3.10 發出 HTTP GET 請求的庫,并正在使用 GitHub v3 REST API 進行練習。這是我的基本請求代碼:
# Python Standard Library imports
import asyncio
import sys
# External library imports
import aiohttp
# GitHub API v3 REST endpoint for licenses
GITHUB_URL: str = "https://api.github.com/licenses"
# GitHub query headers
GITHUB_HEADERS: dict = {
"Accept": "application/vnd.github.v3 json"
}
async def main():
async with aiohttp.ClientSession() as session:
async with session.get(GITHUB_URL, headers = GITHUB_HEADERS) as GitHub_response:
print(GitHub_response.content)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
sys.exit(0)
代碼運行沒有錯誤,但關鍵print(GitHub_response.content行給了我:
<StreamReader 2037 位元組 eof>
這不是我所期望的。到底什么是StreamReader物件???
我所期望的是curl命令curl -H "Accept: application/vnd.github.v3 json" "https://api.github.com/licenses
會給我的 JSON 輸出,如下所示:
[
{
"key": "agpl-3.0",
"name": "GNU Affero General Public License v3.0",
"spdx_id": "AGPL-3.0",
"url": "https://api.github.com/licenses/agpl-3.0",
"node_id": "MDc6TGljZW5zZTE="
},
{
"key": "bsd-2-clause",
"name": "BSD 2-Clause \"Simplified\" License",
"spdx_id": "BSD-2-Clause",
"url": "https://api.github.com/licenses/bsd-2-clause",
"node_id": "MDc6TGljZW5zZTQ="
},
.....
我嘗試用 替換我的print()行print(GitHub_response.json()),但這給了我:
<coroutine object ClientResponse.json at 0x7f7e452b5e00>
所以它仍然不是我期待的 JSON。
我做錯了什么?以及如何修復我的 Python 代碼,以便獲得實際的 JSON回應aiohttp?
謝謝你。
PS我嘗試使用 Pythonrequests庫進行上述操作。在這種情況下,回應的內容是一個bytes物件,我必須先從庫中decode("utf8")使用它才能將其轉換為實際的 JSON。不確定這些資訊是否有助于弄清楚我在使用.json.dumps()jsonaiohttp
uj5u.com熱心網友回復:
“內容”是StreamReader的一個實體。這提供了一個協程“讀取”,它讀取以字串形式回傳內容。將以下示例插入您的代碼中,您應該會得到預期的結果。
x = await GitHub_response.content.read()
print(x)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/421432.html
標籤:
