簡體   English   中英

使用 Python 理解 API 並與之交互

[英]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 個參數, URLName ,所以我做到了:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM