【问题标题】:How can I find the URL that downloads a file?如何找到下载文件的 URL?
【发布时间】:2019-05-18 14:31:34
【问题描述】:

我正在开发一个网络爬虫,我需要从一个页面下载一个.pdf 文件。我可以从 html 标记中获取文件名,但找不到下载文件的完整 url(或请求正文)。

我尝试使用 chrome 和 firefox 网络流量工具以及使用 wireshark 来嗅探流量,但没有成功。我可以看到它向与页面本身完全相同的 url 发出发布请求,所以我不明白为什么会发生这种情况。我的猜测是文件名是在 POST 请求正文中发送的,但我也无法在这些工具中找到该信息。如果我可以在正文中看到变量名称,我可以创建请求的副本,然后获取文件。

我怎样才能获得这些信息?

这里是我说的网站:http://www2.trt8.jus.br/consultaprocesso/formulario/ProcessoConjulgado.aspx?sDsTelaOrigem=ListarProcessos.aspx&iNrInstancia=1&sFlTipo=T&iNrProcessoVaraUnica=126&iNrProcessoUnica=1267&iNrProcessoAnoUnica=2010&iNrRegiaoUnica=8&iNrJusticaUnica=5&iNrDigitoUnica=24&iNrProcesso=1267&iNrProcessoAno=2010&iNrProcesso2a=0&iNrProcessoAno2a=0

编辑:对于那些想要做类似事情的人,看看这个网站:http://curl.trillworks.com/
它将 cURL 转换为 python 请求代码。很有用

【问题讨论】:

    标签: http networking google-chrome-devtools wireshark


    【解决方案1】:

    用于请求的 POST 数据是 ASP.NET 生成的编码内容。它包含链接所在页面的各种状态/会话信息。这使得直接抓取 URL 变得困难。

    您可以通过从 Chrome DevTools 的网络选项卡中导出 HAR 来检查它:

    __EVENTVALIDATION 数据用于确保在客户端引发的事件源自服务器在页面上呈现的控件。

    您可以通过首先请求链接所在的页面来实现您想要的,然后从响应中提取所需的 POST 数据(包含页面状态和对文件的嵌入式请求),然后使用此信息。这假设服务器在此期间不会使任何会话过期。

    【讨论】:

    • 谢谢,我会试试这个。我可以使用这个 har 文件在 PostMan 或类似软件上创建发帖请求吗?
    • 看起来你可以按照这些思路做一些事情。请参阅此讨论:github.com/postmanlabs/postman-app-support/issues/86
    • 是的,我刚刚在谷歌上发现了同样的问题。谢谢!
    猜你喜欢
    • 2020-08-26
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多