在 Maximo/Jython 中下载 SetupTools 失败,并显示 HTTP 错误 403 SSL is required

Max*_*iki 6 ssl jython maximo websphere-8

The Definitive Guide to Jython 的附录 A 描述了下载 SetupTools 以与 Jython 一起使用。

https://jython.readthedocs.io/en/latest/appendixA/

这向我表明应该可以从 Maximo 的 Jython 自动化脚本中下载和使用 SetupTools(在我的例子中是 v7.6)。这本书将我们指向以下 URL 以复制将执行此操作的 Jython 脚本:

http://peak.telecommunity.com/dist/ez_setup.py

我在上面的脚本中添加一行来调用函数“use_setuptools”:

use_setuptools()
Run Code Online (Sandbox Code Playgroud)

然后我在 Maximo 应用程序上创建一个按钮并将上述脚本与按钮按下相关联,我收到以下错误:

系统消息 BMXAA7837E - 发生错误,导致 EZ_SETUP 启动点的 EZ_SETUP 脚本无法运行。urllib2.HTTPError: HTTP 错误 403: SSL is required in at line number 280

堆栈跟踪指向由“use_setuptools”调用的函数“download_setuptools”中的以下行:

src = urllib2.urlopen(url)
Run Code Online (Sandbox Code Playgroud)

这似乎是因为请求的 url,在我的情况下:

http://pypi.python.org/packages/2.5/s/setuptools/setuptools-0.6c11-py2.5.egg

...在到达以下网址之前重定向了几次:

https://files.pythonhosted.org/packages/98/d3/ed3bc7e3f4b143092862dab99d984261ac4be6a40d4fb1e66d2a10e9ea99/setuptools-0.6c11-py2.5.egg

请注意,该 url 使用 HTTPS 而不是 HTTP。以下说明了为什么会这样:

https://sourceforge.net/p/pypi/support-requests/300/

Maximo 包含的 jython.jar 不包含 ssl 模块,因此我们可以:

  1. 手动下载 ssl 模块并将其复制到服务器上的正确位置。
  2. 通过 HTTPS 手动下载适当的 egg 文件并将其复制到服务器上的正确位置。
  3. 通过为我们正在寻找的文件创建一个镜像来绕过这个问题,该文件可通过 HTTP 访问并在代码中使用该 url。

虽然这些都是可行的,但如果可能的话,我更愿意修改代码以忽略 SSL 证书,但是 StackOverflow 和其他地方的所有解决方法似乎都要求您能够“导入 ssl”以绕过它,这似乎更像是打败目的。

理想情况下,我正在寻找一种解决方案,该解决方案可以修改上面提供的 url 中的代码,以使其与 Maximo/Jython 2.5.2 一起使用,并且不需要下载和添加新模块或包以及 Maximo 需要的所有这些。绕过或暂时禁用 ssl 没有问题,因为代码会检查下载的 .egg 文件的哈希值。如果可能,这将是我的首选解决方案。

小智 2

根据我的经验,如果您能够“尽可能使用 Java”和“尽可能使用 Maximo”,那么自动化脚本效果最好。因此,我将使用Scripting 76 Features 文档中的 LIB_HTTPCLIENT 脚本(第一个示例代码,其名称是通过第二位代码推断得出的)来尝试下载 SetupTools。

如果该文档再次移动,这里是 LIB_HTTPCLIENT 脚本。请注意,该url变量预计由调用脚本传递到此库脚本。

from psdi.iface.router import HTTPHandler
from java.util import HashMap
from java.util import String
handler = HTTPHandler()
map = HashMap()
map.put("URL",url)
map.put("HTTPMETHOD","GET")
responseBytes = handler.invoke(map,None)
response = String(responseBytes,"utf-8")
Run Code Online (Sandbox Code Playgroud)

  • 使用 HTTPS URL 时出现的协议错误可能是由于 TLS v1.2 造成的。目标可能需要它,但您使用的 Java 版本不支持它(默认情况下)。如果您在 JDK 7 或更早版本上运行,通常会出现这种情况。我认为 JDK 8 是第一个默认支持 TLS v1.2 的版本。 (2认同)