微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用PROPFIND

如何解决使用PROPFIND

我们正在使用PROPFIND请求来获取特定文件夹中所有文件的列表。

curl --location --request PROPFIND 'https://example.com/some_folder' \
    --header 'Authorization: Basic eHh4Onl5eQ=='

但是在某些文件夹中,我们大约有1M个文件,并请求超时。 有什么方法可以设置每个请求的起始位置和文件数限制吗?

解决方法

RFC6578 可以用于分页,但是我敢打赌,对此的支持很少。

,

恢复不完整的下载确实不是curl的事情,而是wget的事情(curl没有自动重试/恢复不完整的下载的本机支持,但是wget 确实支持它。 curl,除了curl外,您还需要一些脚本语言,例如php / python / whatever)

默认情况下,curl下载到stdout,而wget下载到文件,要让wget下载到stdout,添加参数-O-,默认情况下,wget的curl等效于--location,因此不需要翻译在那里,--request PROPFIND转换为--method=PROPFIND,而--header 'Authorization: Basic eHh4Onl5eQ=='大致转换为--auth-no-challenge --http-user='xxx' --http-password='yyy',我们将其放在一起

wget --tries=10 -O- --method=PROPFIND --auth-no-challenge --http-user='xxx' --http-password='yyy' 'https://example.com/some_folder'

它应该在放弃之前自动最多恢复10次下载,您可以使用--tries=10参数进行更改

为完整起见,这是wget将通过上述调用发送的请求:

PROPFIND /some_folder HTTP/1.1
User-Agent: Wget/1.19.1 (cygwin)
Accept: */*
Accept-Encoding: identity
Authorization: Basic eHh4Onl5eQ==
Host: example.com
Connection: Keep-Alive

有什么方法可以设置每个请求的起始位置和文件数限制吗?

..已经略读了RFC1918和RFC5689,我不这么认为;它是HTTP,因此您可以发出HTTP Range requests来仅下载列表的一部分,但是您将无法将其解析为格式正确的XML,就必须像浏览器解析HTML一样对其进行模糊解析。 。(PS libxml2对解析损坏的XML有很好的支持,PHP对libxml2具有很好的绑定,使用PHP的DOMDocument :: loadHTML()&co进行模糊解析可能并不难)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。