下载
# *`下载。下载`*-函数
download(url, [ output = tempname() ];
[ method = "GET", ]
[ headers = <none>, ]
[ timeout = <none>, ]
[ progress = <none>, ]
[ verbose = false, ]
[ debug = <none>, ]
[ downloader = <default>, ]
) -> output
url :: AbstractString
output :: Union{AbstractString, AbstractCmd, IO}
method :: AbstractString
headers :: Union{AbstractVector, AbstractDict}
timeout :: Real
progress :: (total::Integer, now::Integer) --> Any
verbose :: Bool
debug :: (type, message) --> Any
downloader :: Downloader
从给定的url下载文件,将其保存到 输出 或者如果没有指定,则为临时路径。 该 输出 也可以是一个 伊俄 句柄,在这种情况下,响应的主体被流式传输到该句柄并返回该句柄。 如果 输出 是一个命令,该命令运行并输出在stdin上发送给它。
如果 下载器 提供关键字参数,它必须是 下载器 对象。 资源和连接将在由相同执行的下载之间共享 下载器 并在对象被垃圾回收或在宽限期内没有使用它执行下载时自动清理。 见 下载器 有关配置和使用的更多信息。
如果 标头/标头 提供关键字参数,它必须是一个向量或字典,其元素都是字符串对。 这些对在下载具有支持它们的协议(如HTTP/S)的Url时作为标头传递。
该 超时时间 关键字参数指定下载完成的超时时间(以秒为单位),分辨率为毫秒。 默认情况下不设置超时,但也可以通过传递超时值来显式请求 资讯. 另外,如果20秒过去没有收到任何数据,下载将超时。 有关如何禁用此超时,请参阅扩展帮助。
如果 进展情况 提供关键字参数,它必须是一个回调函数,每当有关于正在进行的下载的大小和状态的更新时,都会调用该函数。 回调必须采用两个整数参数: 总计 和 现在 它们是以字节为单位的下载的总大小,以及到目前为止已下载的字节数。 请注意 总计 开始为零,并保持为零,直到服务器给出下载的总大小的指示(例如,与 内容-长度 头),这可能永远不会发生。 因此,一个表现良好的进度回调应该优雅地处理总大小为零。
如果 详细,详细 选项设置为true, 利库尔,用于实现下载功能将打印调试信息到 斯德尔. 如果 调试/调试 选项设置为接受两个函数 字符串 参数,然后忽略详细选项,而是将已打印到的数据 斯德尔 被传递给 调试/调试 回调与 类型 和 信息 争论。 该 类型 参数指示发生了什么样的事件,并且是: 文本, 标题在, 标头输出, 数据在, 数据输出, SSL数据在 或 SSL数据输出. 该 信息 参数是调试事件的描述。
*扩展帮助*
如需进一步定制,请使用 下载器和https://github.com/JuliaLang/Downloads.jl#mutual-tls-using-downloads[脧锚脧赂易看s]。 例如,若要在没有收到数据时禁用20秒超时,可以使用以下方法:
downloader = Downloads.Downloader()
downloader.easy_hook = (easy, info) -> Downloads.Curl.setopt(easy, Downloads.Curl.CURLOPT_LOW_SPEED_TIME, 0)
Downloads.download("https://httpbingo.julialang.org/delay/30"; downloader)
# *`下载。请求`*-函数
request(url;
[ input = <none>, ]
[ output = <none>, ]
[ method = input ? "PUT" : output ? "GET" : "HEAD", ]
[ headers = <none>, ]
[ timeout = <none>, ]
[ progress = <none>, ]
[ verbose = false, ]
[ debug = <none>, ]
[ throw = true, ]
[ downloader = <default>, ]
[ interrupt = <none>, ]
) -> Union{Response, RequestError}
url :: AbstractString
input :: Union{AbstractString, AbstractCmd, IO}
output :: Union{AbstractString, AbstractCmd, IO}
method :: AbstractString
headers :: Union{AbstractVector, AbstractDict}
timeout :: Real
progress :: (dl_total, dl_now, ul_total, ul_now) --> Any
verbose :: Bool
debug :: (type, message) --> Any
throw :: Bool
downloader :: Downloader
interrupt :: Base.Event
向给定的url发出请求,返回 回应 对象捕获有关响应的状态、标头和其他信息。 响应的主体写入到 输出 如果指定,否则丢弃。 对于HTTP/S请求,如果 输入 流给出,一 把 提出要求;否则,如 输出 流给出,一 获取 提出要求;如果两者都没有得到 头 请求提出。 对于其他协议,根据请求的输入和输出的组合使用适当的默认方法。 以下选项与 下载 功能:
* 输入 允许提供请求正文;如果默认提供 把 请求
* 进展情况 是一个回调,为上传和下载进度取四个整数
* 投掷 控制是否抛出或返回 请求者;请求者 根据请求错误
请注意,与 下载 如果请求的URL无法下载,则会引发错误(由非2xx状态代码指示), 请求 返回a 回应 对象无论响应的状态代码是什么。 如果根本没有得到响应的错误,那么一个 请求者;请求者 被抛出或返回。
如果 中断 提供关键字参数,它必须是 基地。活动 对象。 如果在请求进行期间触发事件,则请求将被取消并引发错误。 这可用于中断长时间运行的请求,例如,如果用户想要取消下载。
# *`下载。回应`*-类型
struct Response
proto :: String
url :: String
status :: Int
message :: String
headers :: Vector{Pair{String,String}}
end
回应 是一种类型,将成功响应请求的属性捕获为对象。 它具有以下字段:
* 原,原:用于获取响应的协议
* 网址:以下重定向后最终请求的URL
* 状况:响应的状态码,表示成功、失败等。
* 信息:描述响应性质的文本消息
* 标头/标头:随响应返回的任何标头
其中一些响应的含义和可用性取决于用于请求的协议。 对于许多协议,包括HTTP/S和S/FTP,2xx状态代码表示成功响应。 对于不支持标头的协议中的响应,标头向量将为空。 HTTP/2不包括状态消息,只有状态代码,因此消息将为空。
# *`下载。请求者;请求者`*-类型
struct RequestError <: ErrorException
url :: String
code :: Int
message :: String
response :: Response
end
请求者;请求者 是一种类型,它将请求的失败响应的属性捕获为异常对象:
* 网址:请求的原始URL,没有任何重定向
* 密码:libcurl错误代码; 0 如果发生仅协议错误
* 信息:libcurl错误消息,指示出了什么问题
* 回应:响应对象捕获可用的响应信息
一样的 请求者;请求者 类型由抛出 下载 如果请求成功,但存在由不在2xx范围内的状态代码指示的协议级错误,则在这种情况下 密码 将是零和 信息 字段将是空字符串。 该 请求 API只抛出一个 请求者;请求者 如果libcurl错误 密码 是非零,在这种情况下,包括 回应 对象很可能有一个 状况 零和一个空消息。 但是,在某些情况下,由于协议错误而引发curl级错误,在这种情况下,内部和外部代码和消息都可能感兴趣。
# *`下载。下载器`*-类型
Downloader(; [ grace::Real = 30 ])
下载器 对象用于执行单独 下载 行动。 连接、名称查找和其他资源在 下载器. 这些连接和资源在一个可配置的宽限期(默认:30秒)后被清理,因为任何东西都是用它下载的,或者当它被垃圾收集时(以先到者为准)。 如果宽限期设置为零,所有资源将立即清理,一旦没有更多正在进行的下载。 如果宽限期设置为 资讯 然后资源不会被清理,直到 下载器 是垃圾收集。