[英]Understanding and Interacting with API using Python
我安裝了一個基本的 API 作為我的本地主機服務器,它執行諸如添加相機、星形相機、列出相機、相機幀快照等功能。
我的問題是在遵循文檔之后,我似乎仍然無法與它很好地交互並獲得我需要的響應。 這是我用來登錄並獲取驗證令牌的代碼:
import requests
import urllib.request
import json
base_url = "http://localhostip:8080/api/user/login?"
parameters = {
"username": username,
"password": password
}
auth_tok = requests.post(base_url + urllib.parse.urlencode(parameters)).json()
print(auth_tok)
我使用令牌獲得了正確的記錄響應,因此按照文檔添加相機我需要 2 個參數, URL
和Name
,所以我做到了:
base_url = "http://localhostip:8080/api/camera/add?"
parameters = {
"url": 'rtsp://192.168.1.23/1',
#or video file
"url" : '/home/video/sample.mov'
"name" : 'cam1'
}
r = requests.post(base_url + urllib.parse.urlencode(parameters),headers={'Authorization': auth_tok})
當我打印響應時:
-print (r)
-print (r.url)
-print(r.status_code)
-print(r.json())
我明白了:
<Response [500]>
http://192.168.0.162:8080/service/api/camera/add?url=rtsp%3A%2F%2Frtsp%3A%2F%2F192.168.1.23&name=cam1
500
{'code': -111, 'message': None}
根據文檔,正確的網址應該是這樣的:
http://192.168.0.6:8080/service/api/camera/add?url=rtsp://192.168.1.23&name=cam1
響應應該是:
Response: {"status":"ok"}
那么為什么以及如何以正確的格式制作 URL POST,因為我懷疑這是問題所在,URL 具有這些可能會擾亂請求的編碼符號?
當我使用這個 API 的 Web 瀏覽器 GUI 時,我可以添加相機甚至視頻文件來播放,但我正在嘗試用 Python 做同樣的事情,以便我將來可以做進一步的處理。
您的問題是當您對“//”符號進行編碼時,因此,為了解決該問題,您需要使用 urllib 中的另一個函數 urllib.parse.unquote(),並將您的編碼函數 urllib.parse.urlencode 用作參數(參數):
import urllib
parameters = {
"url": 'rtsp://192.168.1.23/1',
"name" : 'cam1'
}
結果是:
print(urllib.parse.urlencode(parameters))
'url=rtsp%3A%2F%2F192.168.1.23%2F1&name=cam1'
print(urllib.parse.unquote(urllib.parse.urlencode(parameters)))
'url=rtsp://192.168.1.23/1&name=cam1'
來源https://docs.python.org/3.0/library/urllib.parse.html#urllib.parse.unquote
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.