繁体   English   中英

如何通过 python 脚本添加登录凭据?

[英]How to add login credential via python script?

我确信这是某个地方的已回答问题,但我找不到适合我的解决方案(如果您知道重复,请随时标记它)。

我的目标是查询一个 RESTful API。 为此,我需要进行身份验证。 对于这个 API,我唯一可用的方法是通过网络浏览器。

基本上,我正在加载 URL,它重定向到另一个 URL。 在第二个 URL 中,有一个表单,我需要输入usernamepassword进行身份验证。 目前,我通过 web 浏览器手动输入凭据。

我的问题是:我能否以编程方式执行此操作,这样我就不必通过 web 浏览器手动输入凭据?

注意:网页未经验证。

尝试 1

我尝试了以下命令,但没有一个有效:

curl -k -u username:password https://myurl:port

它没有返回任何东西。

尝试 2

BASE_URL = 'https://myurl:port'
username = 'username'
password = 'password'
r = requests.get(BASE_URL, auth=(username, password), verify=False)
print(r.status_code, r.reason)

它打印<Response [200]>但它不进行身份验证。 这是因为当我尝试查询 API 端点时 - 它说我未经授权。 当我在浏览器中手动输入凭据时,端点查询就起作用了。

尝试 3

最后,我认为(但没有这样做)我需要一些方法来读取登录页面并通过获取 html 元素然后单击登录(例如 selenium)来输入凭据,但这似乎太粗糙且容易出错。 也许有更优雅的方式。

关于我如何做到这一点的任何想法?

基本上,我正在加载 URL,它重定向到另一个 URL。 在第二个 URL 中,有一个表单,我需要输入用户名和密码进行身份验证

从您的描述看来,您正在使用 OAuth2 和授权代码授予流程访问 API?...根据设计要求用户(=资源所有者)授权(通过表单)您的应用程序(=客户端)访问他的/她的数据由 API(=资源服务器)提供。 在这种情况下,使用基本身份验证(尝试 1 和 2)对您没有帮助,因为 API 需要一个令牌,而不是用户名/密码。 您可能需要一个不会过期的刷新令牌,并且允许您的客户端在每次想要访问 API 时请求一个新的访问令牌...

这一切都取决于您的 API 使用的身份验证机制...我首先要弄清楚您的 API 是否确实在使用 OAuth2,如果是,请了解身份验证流程(例如Z5E056C500A1C4B6A7110B50D807BADE5。 learn-oauth-2/ )...如果 API 允许,您可能需要客户端凭据流...

更新:尝试 3 可能值得一试,但我从未做过。 您可以通过 python 请求提交相应的表单数据来发送凭据...那么理论上应该为您提供一个授权码,您可以使用它来获取令牌...

感谢您向我们展示您的尝试。

如果尝试 2 返回 200 状态码。 这意味着它确实有效,这意味着basic auth有效。 简单的解决方案是将auth=(username, password)传递给您的所有 api 调用。

或者您可以使用requests.Session()进行一次身份验证并保留 session,前提是服务器支持 session 身份验证。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM