Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从受密码保护的网站下载数据_Python - Fatal编程技术网

Python 如何从受密码保护的网站下载数据

Python 如何从受密码保护的网站下载数据,python,Python,我正在使用python中的request尝试下载此文件: 有14000个这样的文件,因此我需要自动化这个过程。我在网上发现的其他技术似乎不起作用。我假设网站是为使用不同的身份验证方法而设计的。我对web开发了解不多,因此无法了解这种身份验证是如何工作的 编辑 代码如下: import json import requests from requests.auth import HTTPBasicAuth file = open("srtm30m_bounding_boxes.json", '

我正在使用python中的request尝试下载此文件: 有14000个这样的文件,因此我需要自动化这个过程。我在网上发现的其他技术似乎不起作用。我假设网站是为使用不同的身份验证方法而设计的。我对web开发了解不多,因此无法了解这种身份验证是如何工作的

编辑

代码如下:

import json
import requests
from requests.auth import HTTPBasicAuth


file = open("srtm30m_bounding_boxes.json", 'r')
strjson = file.read()
x = json.loads(strjson)

filenamelist = []

url = "http://e4ftl01.cr.usgs.gov/MEASURES/SRTMGL1.003/2000.02.11/N55W003.SRTMGL1.hgt.zip"

for i in range(14295):
    filenamelist.append(x['features'][i]['properties']['dataFile'])
    filenamelist[i] = "http://e4ftl01.cr.usgs.gov/MEASURES/SRTMGL1.003/2000.02.11/" + filenamelist[i]

jar = requests.cookies.RequestsCookieJar()
jar.set('urs_user_already_logged', 'yes')
jar.set('_urs-gui_session','8b972449036e60e3d83a6a819b93124d')
r = requests.get(url, cookies=jar)
ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
这是我运行代码时遇到的错误:

import json
import requests
from requests.auth import HTTPBasicAuth


file = open("srtm30m_bounding_boxes.json", 'r')
strjson = file.read()
x = json.loads(strjson)

filenamelist = []

url = "http://e4ftl01.cr.usgs.gov/MEASURES/SRTMGL1.003/2000.02.11/N55W003.SRTMGL1.hgt.zip"

for i in range(14295):
    filenamelist.append(x['features'][i]['properties']['dataFile'])
    filenamelist[i] = "http://e4ftl01.cr.usgs.gov/MEASURES/SRTMGL1.003/2000.02.11/" + filenamelist[i]

jar = requests.cookies.RequestsCookieJar()
jar.set('urs_user_already_logged', 'yes')
jar.set('_urs-gui_session','8b972449036e60e3d83a6a819b93124d')
r = requests.get(url, cookies=jar)
ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

最简单的方法是在主机之前的URL中提供用户名和密码,例如:

requests.get('http://{username}:{password}@e4ftl01.cr.usgs.gov/MEASURES/SRTMGL1.003/2000.02.11/{subpath}'.format(username=username, password=password, subpath=filenamelist[i]))
您还可以将用户名/密码作为
auth
参数提供,以获取:

requests.get('http://e4ftl01.cr.usgs.gov/MEASURES/SRTMGL1.003/2000.02.11/{subpath}'.format(subpath=filenamelist[i]), auth=(username, password))

totalhack认为https更安全是正确的,而且它似乎在这个网站上起作用。这种形式的身份验证以明文形式传输用户名和密码,因此任何能够观察http请求的人都可以窃取您的登录名。https加密用户名/密码,因为它会加密整个请求。

请提供您已经尝试过的代码,也请提供
不起作用的代码。
谢谢,我已经补充说,您应该使用https进行基本身份验证。我意识到你只是在复制OP的URL。非常感谢,你测试过这个吗?它似乎不起作用(这两种方法都会出现401错误),我用另一个使用HTTP Basic auth的站点进行了测试,然后在发布代码时更改了URL。如果它不起作用,但您能够以交互方式使用该用户名/密码,我不知道为什么。您可以尝试输入用户名:password@host是的,我不认为它使用HTTP基本身份验证。你重定向到的URL中有OAuth字样。这是我上一句话的唯一证据。当我点击你的zip文件时,我会得到一个密码提示。当我取消密码提示时,它会显示“HTTP Basic:拒绝访问”。该页面上的HTTP标题包括“WWW Authenticate:Basic realm=”请输入您的Earthdata登录凭据。如果您没有Earthdata登录,请在“”处创建一个,这样无论它在做什么,它都在执行HTTP Basic。