Python 使用urllib代替wget进行会话身份验证
因此,目前我有一行python代码,它使用wget和os.system从网站下载文件。但是,当我尝试将此wget转换为更优雅的库(如urllib或requests)时,cookies无法进行身份验证,而是下载登录html页面而不是文件 以下是我目前使用的:Python 使用urllib代替wget进行会话身份验证,python,Python,因此,目前我有一行python代码,它使用wget和os.system从网站下载文件。但是,当我尝试将此wget转换为更优雅的库(如urllib或requests)时,cookies无法进行身份验证,而是下载登录html页面而不是文件 以下是我目前使用的: try: print(URL) os.system( "wget --save-cookies cookies.txt --keep-session-cookies --po
try:
print(URL)
os.system(
"wget --save-cookies cookies.txt --keep-session-cookies --post-data='name={}&password={}' https://fakesite/login".format(
username, password))
os.system("wget --load-cookies cookies.txt --accept=exe {}".format(URL))
except Exception as e:
print(" File not found, please refer to the website manually for download link", e)
我试图将其重构为如下内容:
try:
print("Downloading file {} version: {}......".format(version, buildNo))
with requests.session() as s:
s.post(loginUrl, data="name:{}&password:{}".format(username,password))
print(URL)
r = s.get(URL,cookies=s.cookies, headers={"Accept": "application/octet-stream"})
print (r.content)
但是这失败了,而是打印登录页面的html内容!有人能解释一下吗?您应该在查询中使用
=
而不是:
:
s.post(loginUrl, data="name={}&password={}".format(username,password))
此外,您还可以(并且应该按照请求
最佳实践)对数据
参数进行dict:
s.post(
loginUrl,
data={
'name': username,
'password': password,
}
)
也许可以检查一下:我尝试了您尝试的方式,但由于登录不成功(将数据更改为data={“username”:“some username”,“password”:“password”},但这是特定于api的)。两个问题,登录响应的状态代码是什么?第二个问题,接受是否正确?另外,在wget示例中,您发送的是name而不是username。我收到了302响应,但我已经更改了get请求以允许重定向,它仍然无法执行。我也注意到了用户名问题,但我还是没有解决我的问题:(