curlhs-0.0.2: bindings to libcurl, the multiprotocol file transfer library

Portabilitynon-portable
Stabilityexperimental
MaintainerKrzysztof Kardzis <kkardzis@gmail.com>
Safe HaskellNone

Network.Curlhs.Core

Contents

Description

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)

Synopsis

Global interface

Version info

Error codes

More about error codes in libcurl on http://curl.haxx.se/libcurl/c/libcurl-errors.html

data CURLcode Source

Constructors

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 

Easy interface

See http://curl.haxx.se/libcurl/c/libcurl-easy.html for easy interface overview.

Init, reset, cleanup

curl_easy_reset :: CURL -> IO ()Source

Reset all options of a libcurl session handle (http://curl.haxx.se/libcurl/c/curl_easy_reset.html).

Transfer

Get info

data CURLinfo Source

Instances

Set options

data CURLoption Source

Constructors

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 

Callbacks

Constants