Portability | non-portable |
---|---|
Stability | experimental |
Maintainer | Krzysztof Kardzis <kkardzis@gmail.com> |
Safe Haskell | Safe-Infered |
Module Network.Curlhs.Core provides a mid-level interface to libcurl
.
For a direct low-level bindings go to Network.Curlhs.Base.
API of this module follows the API of libcurl
as defined in version
7.25.0 of the library. But it also depends on the version of libcurl
that is used during compilation of the curlhs
package. It is possible
to use curlhs
with older versions of libcurl
, just keep in mind
that some features may not be available then.
There is not much documentation here, maybe the future will change that,
but for now please use the original libcurl
documentation. API provided
here follows the original API, so this shouldn't be a big problem.
Documentation about libcurl
and/or its particular functions may be
found in manual pages, which are available among others at the libcurl
project site (please refer to http://curl.haxx.se/libcurl/).
Exposed API is still somewhat incomplete, but is usable. Work on the rest are in progress.
Simple example:
import qualified Data.ByteString.Char8 as BS import Data.IORef (newIORef, readIORef, atomicModifyIORef) import Control.Exception (bracket) import Network.Curlhs.Core curlGET :: BS.ByteString -> IO BS.ByteString curlGET url = do buff <- newIORef BS.empty bracket (curl_easy_init) (curl_easy_cleanup) $ \curl -> do curl_easy_setopt curl [ CURLOPT_URL url , CURLOPT_VERBOSE True , CURLOPT_WRITEFUNCTION $ Just (memwrite buff) ] curl_easy_perform curl readIORef buff memwrite buff newbs = atomicModifyIORef buff $ \oldbuff -> (BS.append oldbuff newbs, CURL_WRITEFUNC_OK)
- curl_version :: IO String
- curl_version_info :: IO CURL_version_info_data
- data CURL_version_info_data = CURL_version_info_data {
- curl_version_info_data_version :: String
- curl_version_info_data_version_num :: Int
- curl_version_info_data_host :: String
- curl_version_info_data_features :: [CURL_version]
- curl_version_info_data_ssl_version :: Maybe String
- curl_version_info_data_ssl_version_num :: Int
- curl_version_info_data_libz_version :: Maybe String
- curl_version_info_data_protocols :: [String]
- curl_version_info_data_ares :: Maybe String
- curl_version_info_data_ares_num :: Int
- curl_version_info_data_libidn :: Maybe String
- curl_version_info_data_iconv_ver_num :: Int
- curl_version_info_data_libssh_version :: Maybe String
- data CURL_version
- = CURL_VERSION_IPV6
- | CURL_VERSION_KERBEROS4
- | CURL_VERSION_SSL
- | CURL_VERSION_LIBZ
- | CURL_VERSION_NTLM
- | CURL_VERSION_GSSNEGOTIATE
- | CURL_VERSION_DEBUG
- | CURL_VERSION_ASYNCHDNS
- | CURL_VERSION_SPNEGO
- | CURL_VERSION_LARGEFILE
- | CURL_VERSION_IDN
- | CURL_VERSION_SSPI
- | CURL_VERSION_CONV
- | CURL_VERSION_CURLDEBUG
- | CURL_VERSION_TLSAUTH_SRP
- | CURL_VERSION_NTLM_WB
- curl_easy_strerror :: CURLcode -> IO ByteString
- data CURLcode
- = CURLE_OK
- | CURLE_UNSUPPORTED_PROTOCOL
- | CURLE_FAILED_INIT
- | CURLE_URL_MALFORMAT
- | CURLE_NOT_BUILT_IN
- | CURLE_COULDNT_RESOLVE_PROXY
- | CURLE_COULDNT_RESOLVE_HOST
- | CURLE_COULDNT_CONNECT
- | CURLE_FTP_WEIRD_SERVER_REPLY
- | CURLE_REMOTE_ACCESS_DENIED
- | CURLE_FTP_ACCEPT_FAILED
- | CURLE_FTP_WEIRD_PASS_REPLY
- | CURLE_FTP_ACCEPT_TIMEOUT
- | CURLE_FTP_WEIRD_PASV_REPLY
- | CURLE_FTP_WEIRD_227_FORMAT
- | CURLE_FTP_CANT_GET_HOST
- | CURLE_FTP_COULDNT_SET_TYPE
- | CURLE_PARTIAL_FILE
- | CURLE_FTP_COULDNT_RETR_FILE
- | CURLE_QUOTE_ERROR
- | CURLE_HTTP_RETURNED_ERROR
- | CURLE_WRITE_ERROR
- | CURLE_UPLOAD_FAILED
- | CURLE_READ_ERROR
- | CURLE_OUT_OF_MEMORY
- | CURLE_OPERATION_TIMEDOUT
- | CURLE_FTP_PORT_FAILED
- | CURLE_FTP_COULDNT_USE_REST
- | CURLE_RANGE_ERROR
- | CURLE_HTTP_POST_ERROR
- | CURLE_SSL_CONNECT_ERROR
- | CURLE_BAD_DOWNLOAD_RESUME
- | CURLE_FILE_COULDNT_READ_FILE
- | CURLE_LDAP_CANNOT_BIND
- | CURLE_LDAP_SEARCH_FAILED
- | CURLE_FUNCTION_NOT_FOUND
- | CURLE_ABORTED_BY_CALLBACK
- | CURLE_BAD_FUNCTION_ARGUMENT
- | CURLE_INTERFACE_FAILED
- | CURLE_TOO_MANY_REDIRECTS
- | CURLE_UNKNOWN_OPTION
- | CURLE_TELNET_OPTION_SYNTAX
- | CURLE_PEER_FAILED_VERIFICATION
- | CURLE_GOT_NOTHING
- | CURLE_SSL_ENGINE_NOTFOUND
- | CURLE_SSL_ENGINE_SETFAILED
- | CURLE_SEND_ERROR
- | CURLE_RECV_ERROR
- | CURLE_SSL_CERTPROBLEM
- | CURLE_SSL_CIPHER
- | CURLE_SSL_CACERT
- | CURLE_BAD_CONTENT_ENCODING
- | CURLE_LDAP_INVALID_URL
- | CURLE_FILESIZE_EXCEEDED
- | CURLE_USE_SSL_FAILED
- | CURLE_SEND_FAIL_REWIND
- | CURLE_SSL_ENGINE_INITFAILED
- | CURLE_LOGIN_DENIED
- | CURLE_TFTP_NOTFOUND
- | CURLE_TFTP_PERM
- | CURLE_REMOTE_DISK_FULL
- | CURLE_TFTP_ILLEGAL
- | CURLE_TFTP_UNKNOWNID
- | CURLE_REMOTE_FILE_EXISTS
- | CURLE_TFTP_NOSUCHUSER
- | CURLE_CONV_FAILED
- | CURLE_CONV_REQD
- | CURLE_SSL_CACERT_BADFILE
- | CURLE_REMOTE_FILE_NOT_FOUND
- | CURLE_SSH
- | CURLE_SSL_SHUTDOWN_FAILED
- | CURLE_AGAIN
- | CURLE_SSL_CRL_BADFILE
- | CURLE_SSL_ISSUER_ERROR
- | CURLE_FTP_PRET_FAILED
- | CURLE_RTSP_CSEQ_ERROR
- | CURLE_RTSP_SESSION_ERROR
- | CURLE_FTP_BAD_FILE_LIST
- | CURLE_CHUNK_FAILED
- curl_easy_init :: IO CURL
- curl_easy_reset :: CURL -> IO ()
- curl_easy_cleanup :: CURL -> IO ()
- data CURL
- curl_easy_perform :: CURL -> IO ()
- curl_easy_getinfo :: CURL -> IO CURLinfo
- data CURLinfo = CURLinfo {
- curlinfo_effective_url :: String
- curlinfo_response_code :: Maybe Int
- curlinfo_http_connectcode :: Maybe Int
- curlinfo_filetime :: Maybe UTCTime
- curlinfo_total_time :: Double
- curlinfo_namelookup_time :: Double
- curlinfo_connect_time :: Double
- curlinfo_appconnect_time :: Double
- curlinfo_pretransfer_time :: Double
- curlinfo_starttransfer_time :: Double
- curlinfo_redirect_time :: Double
- curlinfo_redirect_count :: Int
- curlinfo_redirect_url :: Maybe String
- curlinfo_size_upload :: Double
- curlinfo_size_download :: Double
- curlinfo_speed_download :: Double
- curlinfo_speed_upload :: Double
- curlinfo_header_size :: Int
- curlinfo_request_size :: Int
- curlinfo_ssl_verifyresult :: Int
- curlinfo_ssl_engines :: [String]
- curlinfo_content_length_download :: Maybe Double
- curlinfo_content_length_upload :: Maybe Double
- curlinfo_content_type :: Maybe String
- curlinfo_httpauth_avail :: [CURLauth]
- curlinfo_proxyauth_avail :: [CURLauth]
- curlinfo_os_errno :: Int
- curlinfo_num_connects :: Int
- curlinfo_primary_ip :: String
- curlinfo_primary_port :: Int
- curlinfo_local_ip :: String
- curlinfo_local_port :: Int
- curlinfo_cookielist :: [String]
- curlinfo_lastsocket :: Maybe Int
- curlinfo_ftp_entry_path :: Maybe String
- curlinfo_certinfo :: [[String]]
- curlinfo_condition_unmet :: Bool
- curlinfo_rtsp_session_id :: Maybe String
- curlinfo_rtsp_client_cseq :: Int
- curlinfo_rtsp_server_cseq :: Int
- curlinfo_rtsp_cseq_recv :: Int
- curl_easy_setopt :: CURL -> [CURLoption] -> IO ()
- data CURLoption
- = CURLOPT_VERBOSE Bool
- | CURLOPT_HEADER Bool
- | CURLOPT_NOPROGRESS Bool
- | CURLOPT_NOSIGNAL Bool
- | CURLOPT_WILDCARDMATCH Bool
- | CURLOPT_WRITEFUNCTION (Maybe CURL_write_callback)
- | CURLOPT_READFUNCTION (Maybe CURL_read_callback)
- | CURLOPT_FAILONERROR Bool
- | CURLOPT_URL ByteString
- | CURLOPT_PROTOCOLS [CURLproto]
- | CURLOPT_REDIR_PROTOCOLS [CURLproto]
- | CURLOPT_PROXY ByteString
- | CURLOPT_PROXYPORT Int
- | CURLOPT_PROXYTYPE CURLproxy
- | CURLOPT_NOPROXY ByteString
- | CURLOPT_HTTPPROXYTUNNEL Bool
- | CURLOPT_SOCKS5_GSSAPI_SERVICE ByteString
- | CURLOPT_SOCKS5_GSSAPI_NEC Bool
- | CURLOPT_INTERFACE ByteString
- | CURLOPT_LOCALPORT Int
- | CURLOPT_LOCALPORTRANGE Int
- | CURLOPT_DNS_CACHE_TIMEOUT Int
- | CURLOPT_DNS_USE_GLOBAL_CACHE Bool
- | CURLOPT_BUFFERSIZE Int
- | CURLOPT_PORT Int
- | CURLOPT_TCP_NODELAY Bool
- | CURLOPT_ADDRESS_SCOPE Int
- | CURLOPT_TCP_KEEPALIVE Bool
- | CURLOPT_TCP_KEEPIDLE Int
- | CURLOPT_TCP_KEEPINTVL Int
- | CURLOPT_NETRC CURLnetrc
- | CURLOPT_NETRC_FILE ByteString
- | CURLOPT_USERPWD ByteString
- | CURLOPT_PROXYUSERPWD ByteString
- | CURLOPT_USERNAME ByteString
- | CURLOPT_PASSWORD ByteString
- | CURLOPT_PROXYUSERNAME ByteString
- | CURLOPT_PROXYPASSWORD ByteString
- | CURLOPT_HTTPAUTH [CURLauth]
- | CURLOPT_TLSAUTH_TYPE ByteString
- | CURLOPT_TLSAUTH_USERNAME ByteString
- | CURLOPT_TLSAUTH_PASSWORD ByteString
- | CURLOPT_PROXYAUTH [CURLauth]
- | CURLOPT_AUTOREFERER Bool
- | CURLOPT_ACCEPT_ENCODING ByteString
- | CURLOPT_TRANSFER_ENCODING Bool
- | CURLOPT_FOLLOWLOCATION Bool
- | CURLOPT_UNRESTRICTED_AUTH Bool
- | CURLOPT_MAXREDIRS Int
- | CURLOPT_POSTREDIR [CURLredir]
- | CURLOPT_PUT Bool
- | CURLOPT_POST Bool
- | CURLOPT_POSTFIELDSIZE Int
- | CURLOPT_POSTFIELDSIZE_LARGE Int64
- | CURLOPT_COPYPOSTFIELDS ByteString
- | CURLOPT_REFERER ByteString
- | CURLOPT_USERAGENT ByteString
- | CURLOPT_COOKIE ByteString
- | CURLOPT_COOKIEFILE ByteString
- | CURLOPT_COOKIEJAR ByteString
- | CURLOPT_COOKIESESSION Bool
- | CURLOPT_COOKIELIST ByteString
- | CURLOPT_HTTPGET Bool
- | CURLOPT_HTTP_VERSION CURLhttpver
- | CURLOPT_IGNORE_CONTENT_LENGTH Bool
- | CURLOPT_HTTP_CONTENT_DECODING Bool
- | CURLOPT_HTTP_TRANSFER_DECODING Bool
- | CURLOPT_MAIL_FROM ByteString
- | CURLOPT_MAIL_AUTH ByteString
- | CURLOPT_TFTP_BLKSIZE Int
- | CURLOPT_FTPPORT ByteString
- | CURLOPT_DIRLISTONLY Bool
- | CURLOPT_APPEND Bool
- | CURLOPT_FTP_USE_EPRT Bool
- | CURLOPT_FTP_USE_EPSV Bool
- | CURLOPT_FTP_USE_PRET Bool
- | CURLOPT_FTP_CREATE_MISSING_DIRS CURLftpcreate
- | CURLOPT_FTP_RESPONSE_TIMEOUT Int
- | CURLOPT_FTP_ALTERNATIVE_TO_USER ByteString
- | CURLOPT_FTP_SKIP_PASV_IP Bool
- | CURLOPT_FTPSSLAUTH CURLftpauth
- | CURLOPT_FTP_SSL_CCC CURLftpssl
- | CURLOPT_FTP_ACCOUNT ByteString
- | CURLOPT_FTP_FILEMETHOD CURLftpmethod
- | CURLOPT_RTSP_REQUEST CURLrtspreq
- | CURLOPT_RTSP_SESSION_ID ByteString
- | CURLOPT_RTSP_STREAM_URI ByteString
- | CURLOPT_RTSP_TRANSPORT ByteString
- | CURLOPT_RTSP_CLIENT_CSEQ Int
- | CURLOPT_RTSP_SERVER_CSEQ Int
- | CURLOPT_TRANSFERTEXT Bool
- | CURLOPT_PROXY_TRANSFER_MODE Bool
- | CURLOPT_CRLF Bool
- | CURLOPT_RANGE ByteString
- | CURLOPT_RESUME_FROM Int
- | CURLOPT_RESUME_FROM_LARGE Int64
- | CURLOPT_CUSTOMREQUEST ByteString
- | CURLOPT_FILETIME Bool
- | CURLOPT_NOBODY Bool
- | CURLOPT_INFILESIZE Int
- | CURLOPT_INFILESIZE_LARGE Int64
- | CURLOPT_UPLOAD Bool
- | CURLOPT_MAXFILESIZE Int
- | CURLOPT_MAXFILESIZE_LARGE Int64
- | CURLOPT_TIMECONDITION CURLtimecond
- | CURLOPT_TIMEVALUE UTCTime
- | CURLOPT_TIMEOUT Int
- | CURLOPT_TIMEOUT_MS Int
- | CURLOPT_LOW_SPEED_LIMIT Int
- | CURLOPT_LOW_SPEED_TIME Int
- | CURLOPT_MAX_SEND_SPEED_LARGE Int64
- | CURLOPT_MAX_RECV_SPEED_LARGE Int64
- | CURLOPT_MAXCONNECTS Int
- | CURLOPT_CLOSEPOLICY CURLclosepol
- | CURLOPT_FRESH_CONNECT Bool
- | CURLOPT_FORBID_REUSE Bool
- | CURLOPT_CONNECTTIMEOUT Int
- | CURLOPT_CONNECTTIMEOUT_MS Int
- | CURLOPT_IPRESOLVE CURLipresolve
- | CURLOPT_CONNECT_ONLY Bool
- | CURLOPT_USE_SSL CURLusessl
- | CURLOPT_DNS_SERVERS ByteString
- | CURLOPT_ACCEPTTIMEOUT_MS Int
- | CURLOPT_SSLCERT ByteString
- | CURLOPT_SSLCERTTYPE ByteString
- | CURLOPT_SSLKEY ByteString
- | CURLOPT_SSLKEYTYPE ByteString
- | CURLOPT_KEYPASSWD ByteString
- | CURLOPT_SSLENGINE ByteString
- | CURLOPT_SSLENGINE_DEFAULT Bool
- | CURLOPT_SSLVERSION CURLsslver
- | CURLOPT_SSL_VERIFYPEER Bool
- | CURLOPT_CAINFO ByteString
- | CURLOPT_ISSUERCERT ByteString
- | CURLOPT_CAPATH ByteString
- | CURLOPT_CRLFILE ByteString
- | CURLOPT_SSL_VERIFYHOST Int
- | CURLOPT_CERTINFO Bool
- | CURLOPT_RANDOM_FILE ByteString
- | CURLOPT_EGDSOCKET ByteString
- | CURLOPT_SSL_CIPHER_LIST ByteString
- | CURLOPT_SSL_SESSIONID_CACHE Bool
- | CURLOPT_SSL_OPTIONS CURLsslopt
- | CURLOPT_KRBLEVEL ByteString
- | CURLOPT_GSSAPI_DELEGATION CURLgssapi
- | CURLOPT_SSH_AUTH_TYPES [CURLsshauth]
- | CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 ByteString
- | CURLOPT_SSH_PUBLIC_KEYFILE ByteString
- | CURLOPT_SSH_PRIVATE_KEYFILE ByteString
- | CURLOPT_SSH_KNOWNHOSTS ByteString
- | CURLOPT_NEW_FILE_PERMS Int
- | CURLOPT_NEW_DIRECTORY_PERMS Int
- type CURL_write_callback = ByteString -> IO CURL_write_response
- data CURL_write_response
- type CURL_read_callback = Int -> IO CURL_read_response
- data CURL_read_response
- data CURLproto
- = CURLPROTO_ALL
- | CURLPROTO_HTTP
- | CURLPROTO_HTTPS
- | CURLPROTO_FTP
- | CURLPROTO_FTPS
- | CURLPROTO_SCP
- | CURLPROTO_SFTP
- | CURLPROTO_TELNET
- | CURLPROTO_LDAP
- | CURLPROTO_LDAPS
- | CURLPROTO_DICT
- | CURLPROTO_FILE
- | CURLPROTO_TFTP
- | CURLPROTO_IMAP
- | CURLPROTO_IMAPS
- | CURLPROTO_POP3
- | CURLPROTO_POP3S
- | CURLPROTO_SMTP
- | CURLPROTO_SMTPS
- | CURLPROTO_RTSP
- | CURLPROTO_RTMP
- | CURLPROTO_RTMPT
- | CURLPROTO_RTMPE
- | CURLPROTO_RTMPTE
- | CURLPROTO_RTMPS
- | CURLPROTO_RTMPTS
- | CURLPROTO_GOPHER
- data CURLproxy
- data CURLnetrc
- data CURLauth
- data CURLtlsauth = CURL_TLSAUTH_SRP
- data CURLredir
- data CURLhttpver
- data CURLftpcreate
- data CURLftpauth
- data CURLftpssl
- data CURLftpmethod
- data CURLrtspreq
- data CURLtimecond
- data CURLclosepol
- data CURLipresolve
- data CURLusessl
- data CURLsslver
- data CURLsslopt = CURLSSLOPT_ALLOW_BEAST
- data CURLgssapi
- data CURLsshauth
Global interface
Version info
curl_version :: IO StringSource
Returns the libcurl version string (http://curl.haxx.se/libcurl/c/curl_version.html).
curl_version_info :: IO CURL_version_info_dataSource
Returns run-time libcurl version info (http://curl.haxx.se/libcurl/c/curl_version_info.html).
data CURL_version_info_data Source
data CURL_version Source
Error codes
More about error codes in libcurl on http://curl.haxx.se/libcurl/c/libcurl-errors.html
curl_easy_strerror :: CURLcode -> IO ByteStringSource
Returns a string describing error code (http://curl.haxx.se/libcurl/c/curl_easy_strerror.html).
Easy interface
See http://curl.haxx.se/libcurl/c/libcurl-easy.html for easy interface overview.
Init, reset, cleanup
curl_easy_init :: IO CURLSource
Start a libcurl easy session (http://curl.haxx.se/libcurl/c/curl_easy_init.html).
curl_easy_reset :: CURL -> IO ()Source
Reset all options of a libcurl session handle (http://curl.haxx.se/libcurl/c/curl_easy_reset.html).
curl_easy_cleanup :: CURL -> IO ()Source
End a libcurl easy session (http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html).
Transfer
curl_easy_perform :: CURL -> IO ()Source
Perform a file transfer (http://curl.haxx.se/libcurl/c/curl_easy_perform.html).
Get info
curl_easy_getinfo :: CURL -> IO CURLinfoSource
Extract information from a curl handle (http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html).
Set options
curl_easy_setopt :: CURL -> [CURLoption] -> IO ()Source
Set options for a curl easy handle (http://curl.haxx.se/libcurl/c/curl_easy_setopt.html).
data CURLoption Source
Callbacks
type CURL_read_callback = Int -> IO CURL_read_responseSource
data CURL_read_response Source
Constants
data CURLhttpver Source
Eq CURLhttpver | |
Show CURLhttpver | |
CURLenum CURLhttpver |
data CURLftpcreate Source
Eq CURLftpcreate | |
Show CURLftpcreate | |
CURLenum CURLftpcreate |
data CURLftpauth Source
Eq CURLftpauth | |
Show CURLftpauth | |
CURLenum CURLftpauth |
data CURLftpssl Source
Eq CURLftpssl | |
Show CURLftpssl | |
CURLenum CURLftpssl |
data CURLftpmethod Source
Eq CURLftpmethod | |
Show CURLftpmethod | |
CURLenum CURLftpmethod |
data CURLrtspreq Source
Eq CURLrtspreq | |
Show CURLrtspreq | |
CURLenum CURLrtspreq |
data CURLtimecond Source
Eq CURLtimecond | |
Show CURLtimecond | |
CURLenum CURLtimecond |
data CURLclosepol Source
CURLCLOSEPOLICY_NONE | |
CURLCLOSEPOLICY_OLDEST | |
CURLCLOSEPOLICY_LEAST_RECENTLY_USED | |
CURLCLOSEPOLICY_LEAST_TRAFFIC | |
CURLCLOSEPOLICY_SLOWEST | |
CURLCLOSEPOLICY_CALLBACK |
Eq CURLclosepol | |
Show CURLclosepol | |
CURLenum CURLclosepol |
data CURLipresolve Source
Eq CURLipresolve | |
Show CURLipresolve | |
CURLenum CURLipresolve |
data CURLusessl Source
Eq CURLusessl | |
Show CURLusessl | |
CURLenum CURLusessl |
data CURLsslver Source
Eq CURLsslver | |
Show CURLsslver | |
CURLenum CURLsslver |
data CURLgssapi Source
Eq CURLgssapi | |
Show CURLgssapi | |
CURLenum CURLgssapi |