我是 Python 编程新手,正在为我的公司编写一个脚本。我们使用ServiceDesk Plus,它使用Servlet API。我想编写一个脚本,在 Solarwinds 发出警报时自动创建/关闭票证。
我无法弄清楚使用 python 中的 servlet API 自动创建票证的语法。这是我所拥有的(不起作用):
url = 'http://localhost:6970/servlets/RequestServlet/'
params = urllib.urlencode({
'operation': 'AddRequest',
})
response = urllib2.urlopen(url, params).read()
任何帮助将不胜感激。
编辑:
我尝试了詹姆斯推荐的方法,但没有成功。这是使用该建议后我的脚本的样子。
import urllib
import urllib2
url = 'http://localhost:6970/servlets/RequestServlet/'
params = urllib.urlencode({
'operation': 'AddRequest',
'username': 'myuser',
'password': 'mypassword',
'requester': 'Bob Smith',
'subject': 'Test Script Req',
'description': 'TESTING!!!!!!',
})
request = urllib2.Request('http://localhost:6970/servlets/RequestServlet/' ,params)
response = urllib2.urlopen(request)
错误:
C:\Users\xxx\Desktop>python helpdesk2.py
Traceback (most recent call last):
File "helpdesk2.py", line 24, in <module>
response = urllib2.urlopen(request)
File "C:\Python27\lib\urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "C:\Python27\lib\urllib2.py", line 400, in open
response = meth(req, response)
File "C:\Python27\lib\urllib2.py", line 513, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Python27\lib\urllib2.py", line 438, in error
return self._call_chain(*args)
File "C:\Python27\lib\urllib2.py", line 372, in _call_chain
result = func(*args)
File "C:\Python27\lib\urllib2.py", line 521, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: /servlets/RequestServlet/
因此出现以下错误:
urllib2.HTTPError:HTTP 错误 404:/servlets/RequestServlet/
HTTP 404 错误仅意味着请求的资源不存在。在您最喜欢的网络浏览器中通过 http://localhost:6970/servlets/RequestServlet/ 打开页面时,您会得到完全相同的错误。
造成这种情况的可能原因有很多。例如,
/RequestServlet/*
(假设 /servlets
是 Web 应用程序上下文路径),或者如果它实际上映射到 /RequestServlet
的 URL 模式,那么您应该使用以下 URL: http://localhost:6970/servlets/RequestServlet 不带尾部斜杠。也许尝试先创建请求,然后打开请求?
params = urllib.urlencode({
'operation': 'AddRequest',
})
request = urllib2.Request('http://localhost:6970/servlets/RequestServlet/' ,params)
response = urllib2.urlopen(request)