Downloads

Downloads.downloadFunction
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에서 파일을 다운로드하여 output에 저장하거나 지정되지 않은 경우 임시 경로에 저장합니다. output은 또한 IO 핸들이 될 수 있으며, 이 경우 응답의 본문이 해당 핸들로 스트리밍되고 핸들이 반환됩니다. output이 명령인 경우, 명령이 실행되고 출력이 stdin으로 전송됩니다.

downloader 키워드 인수가 제공되면, Downloader 객체여야 합니다. 리소스와 연결은 동일한 Downloader에 의해 수행된 다운로드 간에 공유되며, 객체가 가비지 수집될 때 자동으로 정리되거나 해당 객체로 수행된 다운로드가 없었던 경우 유예 기간이 지나면 정리됩니다. 구성 및 사용에 대한 자세한 내용은 Downloader를 참조하십시오.

headers 키워드 인수가 제공되면, 모든 요소가 문자열 쌍인 벡터 또는 사전이어야 합니다. 이러한 쌍은 HTTP/S와 같이 이를 지원하는 프로토콜로 URL을 다운로드할 때 헤더로 전달됩니다.

timeout 키워드 인수는 다운로드가 완료되는 데 걸리는 시간을 초 단위로 지정하며, 밀리초 단위의 해상도를 가집니다. 기본적으로 타임아웃이 설정되지 않지만, Inf의 타임아웃 값을 전달하여 명시적으로 요청할 수도 있습니다. 별도로, 20초가 경과하고 데이터가 수신되지 않으면 다운로드가 타임아웃됩니다. 이 타임아웃을 비활성화하는 방법에 대한 자세한 도움말을 참조하십시오.

progress 키워드 인수가 제공되면, 진행 중인 다운로드의 크기 및 상태에 대한 업데이트가 있을 때마다 호출되는 콜백 함수여야 합니다. 콜백은 두 개의 정수 인수인 totalnow를 받아야 하며, 이는 다운로드의 총 크기(바이트 단위)와 지금까지 다운로드된 바이트 수입니다. total은 처음에 0으로 시작하며, 서버가 다운로드의 총 크기를 나타내는 신호를 줄 때까지 0으로 유지됩니다(예: Content-Length 헤더로). 따라서 잘 동작하는 진행 콜백은 총 크기가 0인 경우를 우아하게 처리해야 합니다.

verbose 옵션이 true로 설정되면, 다운로드 기능을 구현하는 데 사용되는 libcurlstderr에 디버깅 정보를 출력합니다. debug 옵션이 두 개의 String 인수를 받는 함수로 설정되면, verbose 옵션은 무시되고 대신 stderr에 출력될 데이터가 typemessage 인수와 함께 debug 콜백으로 전달됩니다. type 인수는 어떤 종류의 이벤트가 발생했는지를 나타내며, 다음 중 하나입니다: TEXT, HEADER IN, HEADER OUT, DATA IN, DATA OUT, SSL DATA IN 또는 SSL DATA OUT. message 인수는 디버그 이벤트에 대한 설명입니다.

확장 도움말

추가 사용자 지정을 위해 Downloadereasy_hooks를 사용하십시오. 예를 들어, 데이터가 수신되지 않을 때 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)
source
Downloads.requestFunction
주어진 url에 요청을 하여 상태, 헤더 및 응답에 대한 기타 정보를 캡처하는 `Response` 객체를 반환합니다. 응답의 본문은 지정된 경우 `output`에 기록되며, 그렇지 않으면 폐기됩니다. HTTP/S 요청의 경우, `input` 스트림이 주어지면 `PUT` 요청이 이루어지고; 그렇지 않으면 `output` 스트림이 주어지면 `GET` 요청이 이루어지며; 둘 다 주어지지 않으면 `HEAD` 요청이 이루어집니다. 다른 프로토콜의 경우, 요청된 입력 및 출력의 조합에 따라 적절한 기본 메서드가 사용됩니다. 다음 옵션은 `download` 함수와 다릅니다:

  * `input`은 요청 본문을 제공할 수 있게 하며; 제공된 경우 기본적으로 `PUT` 요청으로 설정됩니다.
  * `progress`는 업로드 및 다운로드 진행을 위한 네 개의 정수를 받는 콜백입니다.
  * `throw`는 요청 오류 발생 시 `RequestError`를 던질지 반환할지를 제어합니다.

요청된 URL을 다운로드할 수 없을 경우(비 2xx 상태 코드로 표시됨) 오류를 던지는 `download`와 달리, `request`는 응답의 상태 코드에 관계없이 `Response` 객체를 반환합니다. 응답을 전혀 받는 데 오류가 발생하면 `RequestError`가 던져지거나 반환됩니다.

`interrupt` 키워드 인수가 제공되면, 이는 `Base.Event` 객체여야 합니다. 요청이 진행 중일 때 이벤트가 트리거되면 요청이 취소되고 오류가 발생합니다. 이는 사용자가 다운로드를 취소하고자 할 때와 같이 오랜 요청을 중단하는 데 사용할 수 있습니다.
source
Downloads.ResponseType
struct Response
    proto   :: String
    url     :: String
    status  :: Int
    message :: String
    headers :: Vector{Pair{String,String}}
end

Response는 요청에 대한 성공적인 응답의 속성을 객체로 캡처하는 타입입니다. 다음과 같은 필드를 가지고 있습니다:

  • proto: 응답을 얻기 위해 사용된 프로토콜
  • url: 리디렉션을 따라 최종적으로 요청된 URL
  • status: 성공, 실패 등을 나타내는 응답의 상태 코드
  • message: 응답의 성격을 설명하는 텍스트 메시지
  • headers: 응답과 함께 반환된 모든 헤더

이 응답 중 일부의 의미와 가용성은 요청에 사용된 프로토콜에 따라 다릅니다. HTTP/S 및 S/FTP를 포함한 많은 프로토콜에서 2xx 상태 코드는 성공적인 응답을 나타냅니다. 헤더를 지원하지 않는 프로토콜의 응답에서는 헤더 벡터가 비어 있습니다. HTTP/2는 상태 메시지를 포함하지 않고 상태 코드만 포함하므로 메시지는 비어 있습니다.

source
Downloads.RequestErrorType
struct RequestError <: ErrorException
    url      :: String
    code     :: Int
    message  :: String
    response :: Response
end

RequestError는 예외 객체로서 요청에 대한 실패한 응답의 속성을 캡처하는 타입입니다:

  • url: 리디렉션 없이 요청된 원래 URL
  • code: libcurl 오류 코드; 프로토콜 전용 오류가 발생한 경우 0
  • message: 무엇이 잘못되었는지를 나타내는 libcurl 오류 메시지
  • response: 사용 가능한 응답 정보를 캡처하는 응답 객체

같은 RequestError 타입은 요청이 성공했지만 2xx 범위에 없는 상태 코드로 표시된 프로토콜 수준 오류가 있는 경우 download에 의해 발생합니다. 이 경우 code는 제로가 되고 message 필드는 빈 문자열이 됩니다. request API는 libcurl 오류 code가 0이 아닐 때만 RequestError를 발생시키며, 이 경우 포함된 response 객체는 status가 0이고 메시지가 비어 있을 가능성이 높습니다. 그러나 프로토콜 오류로 인해 curl 수준 오류가 발생하는 상황도 있으며, 이 경우 내부 및 외부 코드와 메시지가 모두 관심의 대상이 될 수 있습니다.

source
Downloads.DownloaderType
Downloader(; [ grace::Real = 30 ])

Downloader 객체는 개별 download 작업을 수행하는 데 사용됩니다. 연결, 이름 조회 및 기타 리소스는 Downloader 내에서 공유됩니다. 이러한 연결 및 리소스는 다운로드가 완료된 후 설정 가능한 유예 기간(기본값: 30초) 후에 정리되거나, 가비지 컬렉션이 발생할 때 정리됩니다. 유예 기간이 0으로 설정되면 진행 중인 다운로드가 더 이상 없을 때 즉시 모든 리소스가 정리됩니다. 유예 기간이 Inf로 설정되면 Downloader가 가비지 컬렉션될 때까지 리소스가 정리되지 않습니다.

source