gpt4 book ai didi

Python 请求 - 重定向后的身份验证

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:07 25 4
gpt4 key购买 nike

我有一个关于重定向后 HTTP 基本身份验证的快速问题。

我正在尝试登录一个网站,出于操作原因,该网站使用 HTTP 302 响应立即将我重定向到中央登录站点。在我的测试中,似乎 Requests 模块在重定向后没有将我的凭据发送到中央登录站点。如下面的代码片段所示,我被迫从响应对象中提取重定向 URL 并再次尝试登录。

我的问题很简单:
有没有办法强制请求在重定向脱离主机后重新发送登录凭据?

出于可移植性原因,我不希望使用 .netrc 文件。此外,该网站的提供商已将 url_login 设为静态,但并未对 url_redirect 做出此类声明。

感谢您的宝贵时间!

代码片段

import requests

url_login = '<url_login>'
myauth = ('<username>', '<password')

login1 = requests.request('get', url_login, auth=myauth)
# this login fails; response object contains the login form information

url_redirect = login1.url
login2 = requests.request('get', url_redirect, auth=myauth)
# this login succeeds; response object contains a welcome message

更新

这是上面通用代码的一个更具体的版本。

  • 第一个 request() 返回 HTTP 200 响应并在其文本字段中包含表单信息。
  • 第二个 request() 返回一个 HTTP 401 响应,在其文本字段中包含 'HTTP Basic: Access denied.'

(当然,只要提供有效凭据,即可登录成功。)

再次,我想知道我是否可以只调用一次 requests.request() 来实现我想要的登录。

import requests

url_login = 'http://cddis-basin.gsfc.nasa.gov/CDDIS_FileUpload/login'
myauth = ('<username>', '<password>')

with requests.session() as s:
login1 = s.request('get', url_login, auth=myauth)
url_earthdata = login1.url
login2 = s.request('get', url_earthdata, auth=myauth)

最佳答案

我的解决方案是使用“Session”。以下是如何实现 Session。

import requests

s = requests.session()
url_login = "<loginUrl>"

payload = {
"username": "<user>",
"password": "<pass>"
}

req1 = s.post(url_login, data=payload)

# Now to make sure you do not get the "Access denied", use the same session variable for the request.

req2 = s.get(url_earthdata)

这应该可以解决您的问题。

关于Python 请求 - 重定向后的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37945057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com