我正在编写一个 Python3 脚本来通过他们的 HTTP API 触发 Axis 相机。他们需要在 url 中触发数字输入(通过授权)的字符串是:
"http://{ip}/axis-cgi/param.cgi?action=update&IOPort.I0.Input.Trig={open/closed}"
如果我把它放在浏览器中,它会工作 AKA 响应 200 - OK。当我使用 urllib 请求在我的 Linux 机器上运行它时。
#encode user,pass
values = { 'username': username,'password': password }
data = urllib.urlencode(values)
#Axis param.cgi action
action = "update"
trig = "closed"
cgi_args = {"action": action, "IOPort.I0.Input.Trig": trig}
cgi_data = urllib.urlencode(cgi_args)
url = "http://{ip}/axis-cgi/param.cgi?{data}".format(ip=ip, data=cgi_data)
req = urllib2.Request(url, data, headers={'Content-type': 'text/html'})
print(req.get_full_url())
response = urllib2.urlopen(req)
result = response.read()
print (result)
输出是:
http://192.168.50.191/axis-cgi/param.cgi?action=update&IOPort.I0.Input.Trig=closed
action must be specified
我知道我已通过身份验证,否则我会Unauthorized
从服务器获得响应。
正如您在调试时看到的那样,我打印了req.get_full_url()
以确保我已经正确构建了 url 字符串,但是当我在地址栏中看到时,服务器会响应action must be specified
我在浏览器中得到的内容。http://192.168.50.191/axis-cgi/param.cgi?
所以 URL 的操作部分似乎没有进入服务器。
我试过了:
- 用作
%3F
? 字符,但我收到 404 错误 - 将数据嵌入数据参数中也不起作用
我在这里缺少什么吗?