使用Python或Wget进行带身份验证的文件下载

0 投票
1 回答
4072 浏览
提问于 2025-04-17 13:33

基本上,我尝试了很多方法来下载这个文件。我用过Python和wget的实现。现在我其实不太在乎哪一个能成功。

这两者做的事情完全一样……它们下载的是网页,而不是我想要下载的文件。不过,当我把提供的链接直接放到Firefox浏览器里时,它立刻就让我下载了。

我需要做的事情是:
1. 连接到网站(即使它的SSL有点问题?)
2. 进行身份验证
3. 点击第一个链接,这个链接会重定向到下载文件
4. 下载那个文件

首先是我的Python代码:

import httplib2
import urllib2
from BeautifulSoup import BeautifulSoup, SoupStrainer

http = httplib2.Http()
http.add_credentials('username', 'password')
status, response = http.request('https://traveler.pha.phila.gov:8443/servlet/traveler')

counter = 0
Androidlink = ''
Windowslink = ''
Iphonelink = ''

for link in BeautifulSoup(response, parseOnlyThese=SoupStrainer('a')):
    if link.has_key('href'):         
        if counter == 2:
            Iphonelink = link['href']
            counter = counter + 1
        if counter == 1:
            Windowslink = link['href']
            counter = counter + 1   
        if counter == 0:
            Androidlink = link['href']
            counter = counter + 1


url = 'https://traveler.pha.phila.gov:8443' + Androidlink
print url


import requests
from requests.auth import HTTPDigestAuth
r = requests.get(url,verify=False, auth=HTTPDigestAuth('username', 'password'))
print len(r.content)

其次是我的Wget代码,它只下载了网站的HTML,也就是我想要的东西。

wget --no-check-certificate "https://traveler.pha.phila.gov:8443/servlet/traveler?action=GET&deviceType=700&address=https%3A%2F%2Ftraveler.pha.phila.gov%3A8443%2Fservlet%2Ftraveler&userId=desantj&redirectURL=%2Ftraveler%2FLotusTraveler%2Fandroid%2FLotusTraveler.apk" --http-user=username --http-passwd=password

如果我能让其中一个成功获取这个文件(APK文件),我会非常高兴,因为我已经浪费了超过6个小时在这上面。

注意 为了安全原因,用户名和密码被隐藏了。

1 个回答

1

检查一下这个命令:
wget -O LotusTraveler.apk "https://traveler.pha.phila.gov:8443/servlet/traveler?action=GET&deviceType=700&address=https%3A%2F%2Ftraveler.pha.phila.gov%3A8443%2Fservlet%2Ftraveler&userId=desantj&redirectURL=%2Ftraveler%2FLotusTraveler%2Fandroid%2FLotusTraveler.apk" --http-user=username --http-passwd=password
这个命令的意思是用 wget 工具下载一个叫 LotusTraveler.apk 的文件,文件的地址在引号里。这里还包含了用户名和密码,用来通过身份验证。

**补充:抱歉,我应该更仔细地阅读。再次表示抱歉……虽然这并没有回答问题的原因,但我确实通过谷歌找到了很多类似或相同文件的下载地址。

撰写回答