【发布时间】:2019-11-20 10:18:04
【问题描述】:
目标
- 我正在尝试使用 cURL 来验证我的站点用户凭据,创建一个 cookie jar 来存储我的会话 cookie。
- 使用该 cookie,然后尝试执行第二阶段的身份验证,即从下拉列表中选择一个帐户
- 一旦我通过了身份验证,我打算下载一个文件 基于以下示例中的扩展 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