Downloads
Downloads.download
— Functiondownload(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
키워드 인수가 제공되면, 진행 중인 다운로드의 크기 및 상태에 대한 업데이트가 있을 때마다 호출되는 콜백 함수여야 합니다. 콜백은 두 개의 정수 인수인 total
과 now
를 받아야 하며, 이는 다운로드의 총 크기(바이트 단위)와 지금까지 다운로드된 바이트 수입니다. total
은 처음에 0으로 시작하며, 서버가 다운로드의 총 크기를 나타내는 신호를 줄 때까지 0으로 유지됩니다(예: Content-Length
헤더로). 따라서 잘 동작하는 진행 콜백은 총 크기가 0인 경우를 우아하게 처리해야 합니다.
verbose
옵션이 true로 설정되면, 다운로드 기능을 구현하는 데 사용되는 libcurl
이 stderr
에 디버깅 정보를 출력합니다. debug
옵션이 두 개의 String
인수를 받는 함수로 설정되면, verbose 옵션은 무시되고 대신 stderr
에 출력될 데이터가 type
및 message
인수와 함께 debug
콜백으로 전달됩니다. type
인수는 어떤 종류의 이벤트가 발생했는지를 나타내며, 다음 중 하나입니다: TEXT
, HEADER IN
, HEADER OUT
, DATA IN
, DATA OUT
, SSL DATA IN
또는 SSL DATA OUT
. message
인수는 디버그 이벤트에 대한 설명입니다.
확장 도움말
추가 사용자 지정을 위해 Downloader
및 easy_hook
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)
Downloads.request
— Function주어진 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` 객체여야 합니다. 요청이 진행 중일 때 이벤트가 트리거되면 요청이 취소되고 오류가 발생합니다. 이는 사용자가 다운로드를 취소하고자 할 때와 같이 오랜 요청을 중단하는 데 사용할 수 있습니다.
Downloads.Response
— Typestruct Response
proto :: String
url :: String
status :: Int
message :: String
headers :: Vector{Pair{String,String}}
end
Response
는 요청에 대한 성공적인 응답의 속성을 객체로 캡처하는 타입입니다. 다음과 같은 필드를 가지고 있습니다:
proto
: 응답을 얻기 위해 사용된 프로토콜url
: 리디렉션을 따라 최종적으로 요청된 URLstatus
: 성공, 실패 등을 나타내는 응답의 상태 코드message
: 응답의 성격을 설명하는 텍스트 메시지headers
: 응답과 함께 반환된 모든 헤더
이 응답 중 일부의 의미와 가용성은 요청에 사용된 프로토콜에 따라 다릅니다. HTTP/S 및 S/FTP를 포함한 많은 프로토콜에서 2xx 상태 코드는 성공적인 응답을 나타냅니다. 헤더를 지원하지 않는 프로토콜의 응답에서는 헤더 벡터가 비어 있습니다. HTTP/2는 상태 메시지를 포함하지 않고 상태 코드만 포함하므로 메시지는 비어 있습니다.
Downloads.RequestError
— Typestruct RequestError <: ErrorException
url :: String
code :: Int
message :: String
response :: Response
end
RequestError
는 예외 객체로서 요청에 대한 실패한 응답의 속성을 캡처하는 타입입니다:
url
: 리디렉션 없이 요청된 원래 URLcode
: libcurl 오류 코드; 프로토콜 전용 오류가 발생한 경우0
message
: 무엇이 잘못되었는지를 나타내는 libcurl 오류 메시지response
: 사용 가능한 응답 정보를 캡처하는 응답 객체
같은 RequestError
타입은 요청이 성공했지만 2xx 범위에 없는 상태 코드로 표시된 프로토콜 수준 오류가 있는 경우 download
에 의해 발생합니다. 이 경우 code
는 제로가 되고 message
필드는 빈 문자열이 됩니다. request
API는 libcurl 오류 code
가 0이 아닐 때만 RequestError
를 발생시키며, 이 경우 포함된 response
객체는 status
가 0이고 메시지가 비어 있을 가능성이 높습니다. 그러나 프로토콜 오류로 인해 curl 수준 오류가 발생하는 상황도 있으며, 이 경우 내부 및 외부 코드와 메시지가 모두 관심의 대상이 될 수 있습니다.
Downloads.Downloader
— TypeDownloader(; [ grace::Real = 30 ])
Downloader
객체는 개별 download
작업을 수행하는 데 사용됩니다. 연결, 이름 조회 및 기타 리소스는 Downloader
내에서 공유됩니다. 이러한 연결 및 리소스는 다운로드가 완료된 후 설정 가능한 유예 기간(기본값: 30초) 후에 정리되거나, 가비지 컬렉션이 발생할 때 정리됩니다. 유예 기간이 0으로 설정되면 진행 중인 다운로드가 더 이상 없을 때 즉시 모든 리소스가 정리됩니다. 유예 기간이 Inf
로 설정되면 Downloader
가 가비지 컬렉션될 때까지 리소스가 정리되지 않습니다.