如何通过脚本完成Web服务器认证并下载指定CSV文件?
需求与问题描述
需要实现无需打开浏览器,通过脚本完成Web服务器认证并下载指定文件,测试信息如下:
- 登录地址:
https://www.finanzen.net/anmelden - 用户名:
jensleuscher@xmail.de(虚拟账号) - 密码:
999Test%
浏览器操作流程:点击右上角用户图标选择'Musterdepots',找到'Musterdepot'对应的下载链接:https://www.finanzen.net/depot/depot_export_csv.asp?pkdepnr=19405034&intDepotTypId=1,复制到新标签页即可下载Finanzen.net-Musterdepot.csv。
尝试以下两种脚本均返回登录页面,未获取到目标CSV:
失败的cURL脚本
curl -X GET "https://www.finanzen.net/depot/depot_export_csv.asp?pkdepnr=19405034&intDepotTypId=1" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" -H "Accept-Language: de-DE,de;q=0.9" -H "Connection: keep-alive" -H "Upgrade-Insecure-Requests: 1" -H "DNT: 1" -H "Referer: https://www.finanzen.net/" -H "Cache-Control: max-age=0"
失败的PowerShell脚本
$username = "jensleuscher@xmail.de" $password = "999Test%" $URL="https://www.finanzen.net/depot/depot_export_csv.asp?pkdepnr=19405034&intDepotTypId=1" $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($password)")) $response = Invoke-WebRequest -Method Get -uri $URL -Headers @{'Accept'='text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8';'Authorization'=("Basic {0}" -f $base64AuthInfo)} $response.content > test.html
问题核心:未正确完成认证会话,网站通过Cookie维护登录状态,而非Basic认证,需先模拟登录获取有效会话Cookie,再请求下载链接。
解决方案
1. cURL实现方式
步骤说明
- 先发送POST请求完成登录,将会话Cookie保存到本地文件
- 使用保存的Cookie请求下载链接,保存CSV文件
完整脚本
# 第一步:登录并保存Cookie到cookie.txt curl -c cookie.txt -X POST "https://www.finanzen.net/anmelden" \ -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "email=jensleuscher@xmail.de&passwort=999Test%25&submit=Anmelden" # 第二步:使用Cookie下载CSV文件 curl -b cookie.txt -o "Finanzen.net-Musterdepot.csv" "https://www.finanzen.net/depot/depot_export_csv.asp?pkdepnr=19405034&intDepotTypId=1"
注意:密码中的
%需要URL编码为%25,否则会被curl解析为特殊字符。
2. PowerShell实现方式
步骤说明
- 创建
Invoke-WebRequest的会话对象,保持登录状态 - 先发送登录请求,获取会话Cookie
- 使用会话对象请求下载链接,保存CSV文件
完整脚本
$username = "jensleuscher@xmail.de" $password = "999Test%" $loginUrl = "https://www.finanzen.net/anmelden" $downloadUrl = "https://www.finanzen.net/depot/depot_export_csv.asp?pkdepnr=19405034&intDepotTypId=1" $outputFile = "Finanzen.net-Musterdepot.csv" # 创建会话对象,用于保持Cookie $session = New-Object Microsoft.PowerShell.Commands.WebRequestSession # 发送登录请求,提交表单数据 $formData = @{ email = $username passwort = $password submit = "Anmelden" } Invoke-WebRequest -Uri $loginUrl -Method Post -Body $formData -WebSession $session | Out-Null # 使用会话对象下载CSV文件 Invoke-WebRequest -Uri $downloadUrl -WebSession $session -OutFile $outputFile
注意:PowerShell会自动处理URL编码,无需手动转义
%。
内容的提问来源于stack exchange,提问作者jamacoe
相关产品推荐
相关产品推荐

