Python:ServiceDesk PLUS Servlet API

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

我是 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/
python servlets
2个回答
1
投票

因此出现以下错误:

urllib2.HTTPError:HTTP 错误 404:/servlets/RequestServlet/

HTTP 404 错误仅意味着请求的资源不存在。在您最喜欢的网络浏览器中通过 http://localhost:6970/servlets/RequestServlet/ 打开页面时,您会得到完全相同的错误。

造成这种情况的可能原因有很多。例如,

  • 网址真的正确吗?区分大小写!
  • Web 应用程序是否正确部署?读取服务器启动日志。
  • servlet 是否正确初始化?阅读 webapp 启动日志。
  • servlet 是否正确映射到该 URL 上?鉴于 URL 中的尾部斜杠,Servlet 映射 URL 模式应为
    /RequestServlet/*
    (假设
    /servlets
    是 Web 应用程序上下文路径),或者如果它实际上映射到
    /RequestServlet
    的 URL 模式,那么您应该使用以下 URL: http://localhost:6970/servlets/RequestServlet 不带尾部斜杠。

1
投票

也许尝试先创建请求,然后打开请求?

    params = urllib.urlencode({
  'operation': 'AddRequest',
     })
    request = urllib2.Request('http://localhost:6970/servlets/RequestServlet/' ,params)
    response = urllib2.urlopen(request)
© www.soinside.com 2019 - 2024. All rights reserved.