【问题标题】:Python: download files with authentification using requests or urllib3Python:使用请求或 urllib3 下载具有身份验证的文件
【发布时间】:2019-01-12 17:12:21
【问题描述】:

我是 python 新手,需要一点帮助。在工作中,我们有一个本地服务器,我想从那里下载文件。在下载之前,您需要验证自己。 为了下载,我创建了两个脚本。带有 urllib3 的脚本工作正常,但我使用 requests 的另一个脚本却不行。 有人可以检查脚本并告诉我我做错了什么。谢谢。

这个正在工作

import urllib3
url = 'http://q32wad/documents/bills.pdf'
http = urllib3.PoolManager()
headers = urllib3.util.make_headers(basic_auth='username123:password123')
r = http.request('GET', url, headers=headers)
print("STATUS = " + str(r.status))
print("HEADERS = " + str(r.headers))

results:
STATUS = 200
HEADERS = HTTPHeaderDict({'Date': 'Sun, 05 Aug 2018 15:07:32 GMT', 'Server': 'Apache', 'Content-Length': '636', 'Content-Type': 'text/html;charset=ISO-8859-1'})

这个不行

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'}

【问题讨论】:

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


    【解决方案1】:

    我找到了,解决方案,就我而言,this post help me

    最终的工作代码如下

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

    如果有人知道,“trust_env = False”是干什么用的?

    【讨论】:

      【解决方案2】:

      你试过了吗:Python: request basic auth doesn't work

      您似乎错过了一个步骤,实际上是通过服务器进行身份验证。

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

      【讨论】:

      • 感谢您的帮助,但它不起作用。和想法?这就是我尝试 c = requests.Session() c.auth =('username123', 'password123') auth = c.post(url) r = c.get(url)
      • 我也尝试从 requests.auth import HTTPDigestAuth r = requests.get(url, auth=HTTPDigestAuth(username123, 'password123')) 这个例子也不起作用。诀窍在哪里??
      • 对不起,这似乎对我有用。我不知道如何进一步帮助您,您能提供更多信息吗?
      • @Spiderbo 感谢您分享您的想法。为什么使用 urllib3 下载有效,但使用请求却无效,这真的很令人沮丧。同一个文件,同一个服务器。这一定是什么诡计。最后,由于交付解决方案的时间,我将不得不继续使用 urllib3。
      • 好的,对不起,我不能再帮你了。祝你好运!
      猜你喜欢
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多