### Description

Retrieve the headers for a URL for a supported protocol such as http://, ftp://, https:// and ftps://. Prior to R 4.2.0, an optional function not supported on all platforms.

### Usage

curlGetHeaders(url, redirect = TRUE, verify = TRUE,
timeout = 0L, TLS = "")


### Arguments

 url character string specifying the URL. redirect logical: should redirections be followed? verify logical: should certificates be verified as valid and applying to that host? timeout integer: the maximum time in seconds the request is allowed to take. Non-positive and invalid values are ignored (including the default). (Added in R 4.1.0.) TLS character: the minimum version of the TLS protocol to be used for https:// URLs: the default ("") is no restriction beyond that of the underlying libcurl (usually 1.0). Other valid values are "1.1", "1.2" (both for libcurl 7.34.0 and later) and "1.3" (7.52.0 and later), if supported by the underlying version of libcurl and the SSL library it uses.

### Details

This reports what curl -I -L or curl -I would report. For a ftp:// URL the ‘headers’ are a record of the conversation between client and server before data transfer.

Only 500 header lines will be reported: there is a limit of 20 redirections so this should suffice (and even 20 would indicate problems).

If argument timeout is not set to a positive integer this uses getOption("timeout") which defaults to 60 seconds. As the request cannot be interrupted you may want to consider a shorter value.

To see all the details of the interaction with the server(s) set options(internet.info = 1).

HTTP[S] servers are allowed to refuse requests to read the headers and some do: this will result in a status of 405.

For possible issues with secure URLs (especially on Windows) see download.file.

There is a security risk in not verifying certificates, but as only the headers are captured it is slight. Usually looking at the URL in a browser will reveal what the problem is (and it may well be machine-specific).

### Value

A character vector with integer attribute "status" (the last-received ‘status’ code). If redirection occurs this will include the headers for all the URLs visited.

For the interpretation of ‘status’ codes see https://en.wikipedia.org/wiki/List_of_HTTP_status_codes and https://en.wikipedia.org/wiki/List_of_FTP_server_return_codes. A successful FTP connection will usually have status 250, 257 or 350.

capabilities("libcurl") to see if this is supported. libcurlVersion for the version of libcurl in use.

options HTTPUserAgent and timeout are used.

### Examples

## needs Internet access, results vary
curlGetHeaders("http://bugs.r-project.org")   ## this redirects to https://