Python 3.x 通过我的Oracle支持网站进行身份验证

Python 3.x 通过我的Oracle支持网站进行身份验证,python-3.x,bash,oracle,python-requests,wget,Python 3.x,Bash,Oracle,Python Requests,Wget,我意识到我的StackOverflow基本上是不存在的,所以我想我应该用一个正式的问题来美化一下这个地方 我无法通过Oracle支持网站的身份验证来下载修补程序和其他一些项目。这将在自动化管道中使用,并且需要非交互式 背景 我在企业环境中工作,需要一种从Oracle支持网站下载对象的方法。他们的解决方案是为您提供一个单一用途的shell脚本,该脚本使用wget进行身份验证,然后下拉一个文件。它可以工作,但它是交互式的,单一用途的,并且不容易实现自动化 Oracle网站提供的脚本使用以下代码片段获

我意识到我的StackOverflow基本上是不存在的,所以我想我应该用一个正式的问题来美化一下这个地方

我无法通过Oracle支持网站的身份验证来下载修补程序和其他一些项目。这将在自动化管道中使用,并且需要非交互式

背景 我在企业环境中工作,需要一种从Oracle支持网站下载对象的方法。他们的解决方案是为您提供一个单一用途的shell脚本,该脚本使用
wget
进行身份验证,然后下拉一个文件。它可以工作,但它是交互式的,单一用途的,并且不容易实现自动化

Oracle网站提供的脚本使用以下代码片段获取(我假设是)经过身份验证的会话cookie:

wget--secure protocol=auto--save cookies='./cookiefile'--保留会话cookies--http用户“$SSO_USERNAME”--询问密码https://updates.oracle.com/Orion/Services/download“-O/dev/null 2>>“$LOGFILE”

然后重用身份验证请求中生成的cookie下载目标文件:

wget--load cookies=“./cookiefile”https://updates.oracle.com/Orion/Services/download/p6880880_122010_Linux-x86-64.zip?aru=24233312&patch_file=p6880880_122010_Linux-x86-64.zip“-O”$OUTPUT\u DIR/p680880\u 122010\u Linux-x86-64.zip“>>”$LOGFILE“2>&1

--元--
GNUBash,版本5.0.18(1)-发布

python 3.9.5

请求2.25.1

wget 1.21.1

目标 对于这些类型的任务,我更喜欢Python。我可以使用bash,但在这一点上,这是一个挑战

我希望能够向我的脚本传递一个要从Oracle下载的对象列表,让它使用环境变量中设置的凭据向我的Oracle支持站点(MOS)进行身份验证,然后将列表中的每个对象下载到本地目录

问题 我的主要问题是身份验证。我已经尽可能地将
wget
参数转换为python3请求库中的等效参数,但是无论我做什么尝试,我都会得到所需的
401授权

我注意到:

  • 似乎需要更改
    用户代理
    标题。如果网站上的内容来自浏览器,它只会发回登录页面HTML
  • 使用
    会话
    对象应有助于跨请求维护cookie/标题,但我不确定我是否正确理解了文档
  • 我尝试过使用不同的身份验证格式,包括默认的“BasicAuth”和“BasicAuthDigest”
到目前为止我的代码
creds=get_credentials()
会话=请求。会话()
更新({“用户代理”:“Wget/1.21.1”})
login=session.get(
"https://updates.oracle.com/Orion/Services/download",
认证=信用
)
我尝试使用上面的代码片段对网站进行身份验证。对于这个问题,您可以假设
get\u credentials()
将返回一个适当的元组

以下是调试输出(大部分)。为了隐私/简洁,某些部分被截断

request url: https://login.oracle.com:443/oam/server/obrareq.cgi?encquery%3DALMCapFQLcY68rvFp... (truncated)
request status code: 401
request reason: Authorization Required
request content: b''
request headers: {'via': '<company> Proxy', 'Date': 'Tue, 08 Jun 2021 09:41:48 GMT', 'Pragma': 'no-cache', 'Server': 'Oracle-HTTP-Server', 'Expires': '0', 'Connection': 'Keep-Alive', 'Set-Cookie': 'OAM_BASIC_CTXT=VERSION_4~(truncated); path=/, login-ext-prod_iper=976787356.23313.0000; path=/; Httponly; Secure', 'Content-Type': 'text/html; charset=UTF-8', 'Cache-Control': 'no-cache, no-store', 'Content-Length': '0', 'Content-Language': 'en', 'WWW-Authenticate': 'Basic realm="OAM 11g"'}
请求url:https://login.oracle.com:443/oam/server/obrareq.cgi?encquery%3DALMCapFQLcY68rvFp... (截断)
请求状态代码:401
请求原因:需要授权
请求内容:b“”
请求标题:{'via':'Proxy','Date':'Tue,2021年6月8日09:41:48 GMT','Pragma':'no cache','Server':'Oracle HTTP Server','Expires':'0','Connection':'Keep Alive','Set Cookie':'OAM_BASIC_CTXT=VERSION_4~(截断);path=/,login-ext-prod_iper=976787356.23313.0000;path=/;Httponly;Secure',Content Type':'text/html;charset=UTF-8','Cache Control':'no Cache,no store','Content Length':'0','Content Language':'en','WWW Authenticate':'Basic realm=“OAM 11g”}

这是我目前能提供的最多的信息。如果我错过了任何有用的东西,请在评论中告诉我

也许你想做什么就做什么。我们使用它来自动下载补丁。你可以阅读更多关于它的信息,它可以为你节省一些时间,把它作为一个起点。准备好后,在GitHub中找到您的代码会很好。

它完成了我想要的一部分,并且从我能做的事情来看,它做得很好。我需要下载的其他文件不是补丁;即融合中间件基础设施和包安装程序。