[英]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.