Python:使用请求或urllib3下载具有身份验证的文件

时间:2018-08-05 15:47:59

标签: python-3.x python-requests urllib3

我是python的新手,我需要一些帮助。在工作中,我们有一台本地服务器,我想从该服务器下载文件。在下载之前,您需要进行身份验证。 为了下载,我创建了两个脚本。使用urllib3的脚本可以正常工作,但是使用请求的其他脚本则不能。 有人可以检查一下脚本,然后告诉我我做错了什么吗?谢谢。

这个正在工作

import requests
from base64 import b64encode
url = 'http://q32wad/documents/bills.pdf'
# try 1
# r = requests.get(url, auth=('username123', 'password123'))
# r = requests.get(url)
# try 2
# headers = {'username': 'username123', 'password': 'password123'}
# r = requests.get(url, headers=headers)
# try 3
# userAndPass = b64encode(b"username123:password123").decode("ascii") 
# headers = { 'authorization' : 'Basic %s' % userAndPass }
# r = requests.get(url, headers=headers)
# try 4
c = requests.Session()
c.auth =('username123', 'password123')
r = c.get(url)
print("STATUS " + str(r.status_code))
print("HEADERS " + str(r.headers))
results:
STATUS 502
HEADERS {'Date': 'Sun, 05 Aug 2018 15:11:28 GMT', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache', 'Content-Type': 'text/html; charset="UTF-8"', 'Content-Length': '2477', 'Accept-Ranges': 'none', 'Proxy-Connection': 'close'}

这是行不通的

{{1}}

2 个答案:

答案 0 :(得分:1)

我找到了,解决方法,对于我的情况,meta refresh发布帮助我

最终工作代码如下

c = requests.Session()
c.auth =('username123', 'password123')
c.trust_env = False
r = s.get(url)

如果有人知道,“ trust_env = False”是什么意思?

答案 1 :(得分:0)

您尝试过以下方法吗:Python: request basic auth doesn't work

似乎您缺少一步,实际上是在与服务器进行身份验证。

c = requests.Session()
c.auth =('username123', 'password123')
auth = c.post('http://' + url)
r = c.get(url)