【问题标题】:Downloading file with curl after authenticating验证后使用 curl 下载文件
【发布时间】:2019-11-20 10:18:04
【问题描述】:

目标

  1. 我正在尝试使用 cURL 来验证我的站点用户凭据,创建一个 cookie jar 来存储我的会话 cookie。
  2. 使用该 cookie,然后尝试执行第二阶段的身份验证,即从下拉列表中选择一个帐户
  3. 一旦我通过了身份验证,我打算下载一个文件 基于以下示例中的扩展 url - 这要求我提供最新创建的 cookie,因为每次身份验证都会创建新的 cookie。

工作手册代码

curl -s -S -O -J -L 'https://url/report/ajax-by-tag2?platform_id\[\]=7&id1=All&id2=&id3=&id4=All&id5=&id11=&id12=&id13=&date=2019-11-17&date_start=&date_end=&website=&zfTablePage=1&zfTableColumn=&zfTableOrder=desc&zfTableQuickSearch=&zfTableItemPerPage=100&zfTableDataTablesMaxRows=31&zfDetails=false&by_viewability=imps_givt&device_id\[\]=all&tag_type_id\[\]=all&support_id\[\]=all&zfTableItemPerPage=10000&zfTableExport=xlsx' -H 'Cookie: PHPSESSID=6m1d8327ucft8052f2gjv6nfdsg6'

当我手动下载文件时,我从网络面板收集上述内容。使用上面的 curl 我可以从 shell 下载文件。这可以通过在输入末尾硬声明 cookie 来实现。


错误脚本

    #!bash/sh

    -eu

curl -u usr:pwd -c ./cookiejar 'https://url/auth'
curl 'https://url/auth/adminaccounts' -d account=729&Submit=Submit
curl -s -S -O -J -L -b ./cookiejar 'https://url/report/ajax-by-tag2?platform_id\[\]=7&id1=All&id2=&id3=&id4=All&id5=&id11=&id12=&id13=&date=2019-11-17&date_start=&date_end=&website=&zfTablePage=1&zfTableColumn=&zfTableOrder=desc&zfTableQuickSearch=&zfTableItemPerPage=100&zfTableDataTablesMaxRows=31&zfDetails=false&by_viewability=imps_givt&device_id\[\]=all&tag_type_id\[\]=all&support_id\[\]=all&zfTableItemPerPage=10000&zfTableExport=xlsx'

问题

  • 当我运行“手动代码”时,我可以将文件下载到当前目录,前提是我的“cookie”是我在 URL 末尾“-H”之后硬编码的最近会话。

  • 当我运行“错误脚本”时,它似乎在验证、选择帐户并进入下载部分的最后一行时运行正常。但是,在运行下载 url 时,它会吐出以下错误 curl: (23) Failed writing body (0 != 11895)

查看过在线论坛,似乎表明磁盘空间不足,这不应该是这种情况,因为它是一个小的 excel 文件。

非常感谢任何反馈。

【问题讨论】:

  • 尝试将-c ./cookiejar 提供给“错误脚本”部分的第二个命令。您在不提供任何 cookie 的情况下切换帐户,这可能行不通。
  • 您是否对尝试将文件下载到的位置具有写入权限?
  • @eyevan 我尝试将它应用到第二个命令的前面,但它仍然返回相同的错误。我也尝试添加 -b ,但我意识到现在没有意义,因为我在“登录”和“帐户选择”之间获得了一个新的 cookie。
  • 它看起来像this is the error 你得到了——似乎服务器正在断开连接;我猜这与本地文件权限等无关。我的建议是在每个阶段检查 cookie jar 并确保您拥有正确的 cookie(例如,运行第 1 步和第 2 步;从 jar 中提取 PHPSESSID;在 -H 'Cookie: ...' 标头中使用此值作为工作示例)
  • @DawidFerenczyRogožan 我可以确认我拥有下载位置的写入权限。现在我只是想让它下载到我当前的工作目录,即“我的文档”文件夹。

标签: shell curl web-scraping


【解决方案1】:
#!/bin/sh

set -eu

rm -f cookiejar ##deletes cookiejar file at the start, so no cookies are saved

curl -o /dev/null -s -S -L -f -c cookiejar 'https://url/auth/authenticate' -d name=usr-d passwd='pwd' ##supplies user creds

curl -o /dev/null -s -S -L -f -b cookiejar -c cookiejar 'https://url/auth/adminaccounts' -d account=23225 ##selects account

curl -s -S -L -O -J -f -b cookiejar -c cookiejar 'https://url/report/ajax-by-tag2?platform_id\[\]=7&id1=All&id2=&id3=&id4=All&id5=&id11=&id12=&id13=&date=2019-11-17&d$' ##downloads file 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2014-04-06
    • 2016-05-02
    • 2021-07-11
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多