使用Python下载提供用户名和密码的文件

使用Python下载提供用户名和密码的文件,python,Python,我的文件名为“blueberry.jpg”,当我手动单击以下url时开始下载,前提是在询问时键入用户名和密码: 如何使用Python实现这一点 import urllib.request url = 'http://example.com/blueberry/download' data = urllib.request.urlopen(url).read() fo = open('E:\\quail\\' + url.split('/')[1] + '.jpg', 'w') print

我的文件名为“blueberry.jpg”,当我手动单击以下url时开始下载,前提是在询问时键入用户名和密码:

如何使用Python实现这一点

import urllib.request

url = 'http://example.com/blueberry/download'

data = urllib.request.urlopen(url).read()

fo = open('E:\\quail\\' + url.split('/')[1] + '.jpg', 'w')
print (data, file = fo)

fo.close()
但是,上面的程序没有编写所需的文件,如何提供所需的用户名和密码?

使用,它为Python中的各种url库提供了更友好的界面:

import os
import requests

from urlparse import urlparse

username = 'foo'
password = 'sekret'

url = 'http://example.com/blueberry/download/somefile.jpg'
filename = os.path.basename(urlparse(url).path)

r = requests.get(url, auth=(username,password))

if r.status_code == 200:
   with open(filename, 'wb') as out:
      for bits in r.iter_content():
          out.write(bits)
更新:
对于Python3,使用以下命令获取urlparse:
from urllib.parse import urlparse

我敢打赌您使用的是basic auth。因此,请尝试执行以下操作:

import urllib.request

url = 'http://username:pwd@example.com/blueberry/download'

data = urllib.request.urlopen(url).read()

fo = open('E:\\quail\\' + url.split('/')[1] + '.jpg', 'w')
print (data, file = fo)

fo.close()

让我知道这是否有效。

它使用什么类型的授权方案?Basic、Kerberos、NTLM??如果是Basic,您可以尝试使用not sure,我如何知道该授权方案?您必须查看返回的头文件,如果您执意学习/查看更多的gnitty gritty check,请阅读本文。我不明白@burhan的解决方案为什么不起作用-我觉得这很好。当您导航到时,是否要求您在弹出窗口中或在实际网页中的表单中输入凭据?我收到了错误,可能是我的密码由特殊字符组合而成,如$/\。错误消息告诉我们:http.client.InvalidURL:nonnumeric port:虽然我提供的解决方案很简单,@Burhan Khalid的更好。它可以以干净的方式处理潜在的错误消息。
urlopen
不会像
那样解析主机名前面的任何用户名和密码http://user:pwd@foo.com
-它看到
user:pwd
之间的冒号,并试图解析出端口。Get-TypeError:“str”不支持python 3的缓冲区接口,我将代码用作r.iter_content()中位的'code'fo=open(filename,'wb'):print(bits,file=fo)fo.close()在Python2.7中,它编写了一个文件,但不是所需的jpg文件,因为已知的url只是“简单地将
文件名
替换为您想要的任何文件名。对于Python3,获取urlparse with:
from urllib.parse import urlparse