【问题标题】:Downloading SetupTools in Maximo/Jython fails with HTTP error 403 SSL is required在 Maximo/Jython 中下载 SetupTools 失败并出现 HTTP 错误 403 SSL is required
【发布时间】:2020-10-31 11:18:03
【问题描述】:

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

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

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

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

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

use_setuptools()

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

系统消息 BMXAA7837E - 发生错误,阻止了 运行 EZ_SETUP 启动点的 EZ_SETUP 脚本。 urllib2.HTTPError: HTTP 错误 403: SSL is required in at line 280号

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

src = urllib2.urlopen(url)

这似乎是因为请求的 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

请注意,网址使用的是 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 一起使用,并且不需要下载和添加新模块或包,而这一切都需要马克西莫。绕过或暂时禁用 ssl 很好,因为代码会检查下载的 .egg 文件的哈希值。如果可能,这将是我的首选解决方案。

【问题讨论】:

    标签: ssl jython websphere-8 maximo


    【解决方案1】:

    根据我的经验,如果您可以保持“尽可能地使用 Java”和“尽可能地使用 Maximo”,那么自动化脚本编写效果最好。因此,我将使用Scripting 76 Features document 中的 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")
    

    【讨论】:

    • 我很欣赏这个建议,但不幸的是这也没有奏效。使用 http url 我收到以下错误:2020 年 7 月 16 日 10:35:29:193 [DEBUG] EZ_SETUP: error - psdi.util.MXSystemException: BMXAA1482E - 从端点的 HTTP 请求收到的响应代码不成功。如果我使用它重定向到的 https url,我会得到一个更有意义的错误:2020 年 7 月 16 日 10:41:49:680 [DEBUG] EZ_SETUP: error - psdi.util.MXSystemException: BMXAA1477E - The connection failed to the HTTP handler for端点。收到致命警报:protocol_version
    • 不过,所有 Maximo 都是使用可从您的脚本访问的库构建的。您可能无法从自动脚本的文件中全部使用它们,但这是触手可及的强大功能。
    • 您在使用 HTTPS URL 时遇到的协议错误很可能是因为 TLS v1.2。目标可能需要它,但您使用的 Java 版本不支持它(默认情况下)。如果您在 JDK 7 或更早版本上运行,通常就是这种情况。我认为 JDK 8 是第一个默认支持 TLS v1.2 的版本。
    • @Dex 道歉,我花了一段时间才回复,但我认为你可能是对的。我一直在研究这是否与 WebSphere 设置有关,但 TLS v1.2 非常有意义。感谢您花时间回复我的问题!
    猜你喜欢
    • 1970-01-01
    • 2013-12-21
    • 2014-04-10
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2017-06-03
    相关资源
    最近更新 更多