Python-urllib-服务器未在'?'之后得到所有内容在网址中

问题描述 投票:0回答:1

我正在编写Python3脚本,以通过其HTTP API触发Axis相机。他们在URL中触发数字输入(需要授权)所需的字符串是:

"http://{ip}/axis-cgi/param.cgi?action=update&IOPort.I0.Input.Trig={open/closed}"

[如果我将其放在浏览器中,则它也可以正常工作200-确定。当我使用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的操作部分似乎没有到达服务器。

我尝试过:

  1. 使用%3F作为?字符,但出现404错误
  2. 将数据嵌入data参数也不起作用

我在这里想念的东西吗?

python parameters urllib urllib2 vapix
1个回答
0
投票

带有摘要授权的二手pycurl或带有auth的GET请求:

def configCurl():
username = "user"
password = "pass"
auth_mode = pycurl.HTTPAUTH_DIGEST
curl = pycurl.Curl()
curl.setopt(pycurl.HTTPAUTH, auth_mode)
curl.setopt(pycurl.USERPWD, "{}:{}".format(username, password))
curl.setopt(pycurl.WRITEFUNCTION, lambda x: None)
return curl

curl = configCurl()
curl.setopt(curl.URL, url)
curl.perform()
curl.close()
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.