simplify and fix cb_SSH_KEYFUNCTION
[ocurl.git] / curl.mli
blob21b3fd70503a223dd4725b7e1b9809add64e9642
1 (*
2 * curl.mli
4 * Copyright (c) 2003-2008, Lars Nilsson, <lars@quantumchamaeleon.com>
5 * Copyright (c) 2009, ygrek, <ygrek@autistici.org>
6 *)
8 (** libcurl wrapper *)
10 (** {2 Types} *)
12 type t
14 type curlCode =
15 | CURLE_OK
16 | CURLE_UNSUPPORTED_PROTOCOL
17 | CURLE_FAILED_INIT
18 | CURLE_URL_MALFORMAT
19 | CURLE_URL_MALFORMAT_USER
20 | CURLE_COULDNT_RESOLVE_PROXY
21 | CURLE_COULDNT_RESOLVE_HOST
22 | CURLE_COULDNT_CONNECT
23 | CURLE_FTP_WEIRD_SERVER_REPLY
24 | CURLE_FTP_ACCESS_DENIED
25 | CURLE_FTP_USER_PASSWORD_INCORRECT
26 | CURLE_FTP_WEIRD_PASS_REPLY
27 | CURLE_FTP_WEIRD_USER_REPLY
28 | CURLE_FTP_WEIRD_PASV_REPLY
29 | CURLE_FTP_WEIRD_227_FORMAT
30 | CURLE_FTP_CANT_GET_HOST
31 | CURLE_FTP_CANT_RECONNECT
32 | CURLE_FTP_COULDNT_SET_BINARY
33 | CURLE_PARTIAL_FILE
34 | CURLE_FTP_COULDNT_RETR_FILE
35 | CURLE_FTP_WRITE_ERROR
36 | CURLE_FTP_QUOTE_ERROR
37 | CURLE_HTTP_NOT_FOUND
38 | CURLE_WRITE_ERROR
39 | CURLE_MALFORMAT_USER
40 | CURLE_FTP_COULDNT_STOR_FILE
41 | CURLE_READ_ERROR
42 | CURLE_OUT_OF_MEMORY
43 | CURLE_OPERATION_TIMEOUTED
44 | CURLE_FTP_COULDNT_SET_ASCII
45 | CURLE_FTP_PORT_FAILED
46 | CURLE_FTP_COULDNT_USE_REST
47 | CURLE_FTP_COULDNT_GET_SIZE
48 | CURLE_HTTP_RANGE_ERROR
49 | CURLE_HTTP_POST_ERROR
50 | CURLE_SSL_CONNECT_ERROR
51 | CURLE_FTP_BAD_DOWNLOAD_RESUME
52 | CURLE_FILE_COULDNT_READ_FILE
53 | CURLE_LDAP_CANNOT_BIND
54 | CURLE_LDAP_SEARCH_FAILED
55 | CURLE_LIBRARY_NOT_FOUND
56 | CURLE_FUNCTION_NOT_FOUND
57 | CURLE_ABORTED_BY_CALLBACK
58 | CURLE_BAD_FUNCTION_ARGUMENT
59 | CURLE_BAD_CALLING_ORDER
60 | CURLE_HTTP_PORT_FAILED
61 | CURLE_BAD_PASSWORD_ENTERED
62 | CURLE_TOO_MANY_REDIRECTS
63 | CURLE_UNKNOWN_TELNET_OPTION
64 | CURLE_TELNET_OPTION_SYNTAX
65 | CURLE_OBSOLETE
66 | CURLE_SSL_PEER_CERTIFICATE
67 | CURLE_GOT_NOTHING
68 | CURLE_SSL_ENGINE_NOTFOUND
69 | CURLE_SSL_ENGINE_SETFAILED
70 | CURLE_SEND_ERROR
71 | CURLE_RECV_ERROR
72 | CURLE_SHARE_IN_USE
73 | CURLE_SSL_CERTPROBLEM
74 | CURLE_SSL_CIPHER
75 | CURLE_SSL_CACERT
76 | CURLE_BAD_CONTENT_ENCODING
77 | CURLE_LDAP_INVALID_URL
78 | CURLE_FILESIZE_EXCEEDED
79 | CURLE_USE_SSL_FAILED
80 | CURLE_SEND_FAIL_REWIND
81 | CURLE_SSL_ENGINE_INITFAILED
82 | CURLE_LOGIN_DENIED
83 | CURLE_TFTP_NOTFOUND
84 | CURLE_TFTP_PERM
85 | CURLE_REMOTE_DISK_FULL
86 | CURLE_TFTP_ILLEGAL
87 | CURLE_TFTP_UNKNOWNID
88 | CURLE_REMOTE_FILE_EXISTS
89 | CURLE_TFTP_NOSUCHUSER
90 | CURLE_CONV_FAILED
91 | CURLE_CONV_REQD
92 | CURLE_SSL_CACERT_BADFILE
93 | CURLE_REMOTE_FILE_NOT_FOUND
94 | CURLE_SSH
95 | CURLE_SSL_SHUTDOWN_FAILED
96 | CURLE_AGAIN
98 exception CurlException of (curlCode * int * string)
100 (** exception raised when trying to use options missing from libcurl headers,
101 argument is the option name *)
102 exception NotImplemented of string
104 type curlNETRCOption =
105 | CURL_NETRC_OPTIONAL
106 | CURL_NETRC_IGNORED
107 | CURL_NETRC_REQUIRED
109 type curlEncoding =
110 | CURL_ENCODING_NONE (* identity *)
111 | CURL_ENCODING_DEFLATE (* deflate *)
112 | CURL_ENCODING_GZIP (* gzip *)
113 | CURL_ENCODING_ANY (* all supported encodings *)
115 type curlContentType =
116 | DEFAULT
117 | CONTENTTYPE of string
119 type curlHTTPPost =
120 | CURLFORM_CONTENT of string * string * curlContentType
121 | CURLFORM_FILECONTENT of string * string * curlContentType
122 | CURLFORM_FILE of string * string * curlContentType
123 | CURLFORM_BUFFER of string * string * string * curlContentType
126 type curlHTTPPost =
127 | CURLFORM_COPYNAME of string
128 | CURLFORM_PTRNAME of string
129 | CURLFORM_NAMELENGTH of int
130 | CURLFORM_COPYCONTENTS of string
131 | CURLFORM_PTRCONTENTS of string
132 | CURLFORM_FILE of string
133 | CURLFORM_FILECONTENT of string
134 | CURLFORM_CONTENTSLENGTH of int
135 | CURLFORM_CONTENTTYPE of string
138 type curlSSLVersion =
139 | SSLVERSION_DEFAULT (** attempt to figure out the remote SSL protocol version *)
140 | SSLVERSION_TLSv1 (** TLSv1.x *)
141 | SSLVERSION_SSLv2 (** SSLv2 *)
142 | SSLVERSION_SSLv3 (** SSLv3 *)
143 | SSLVERSION_TLSv1_0 (** Added in libcurl 7.34.0, will request TLSv1.x in previous versions *)
144 | SSLVERSION_TLSv1_1 (** Added in libcurl 7.34.0, will request TLSv1.x in previous versions *)
145 | SSLVERSION_TLSv1_2 (** Added in libcurl 7.34.0, will request TLSv1.x in previous versions *)
146 | SSLVERSION_TLSv1_3 (** Added in libcurl 7.52.0, will request TLSv1.x in previous versions *)
148 type curlTimeCondition =
149 | TIMECOND_NONE (** since 0.6.1 *)
150 | TIMECOND_IFMODSINCE
151 | TIMECOND_IFUNMODSINCE
152 | TIMECOND_LASTMOD (** since 0.6.1 *)
154 type curlKRB4Level =
155 | KRB4_NONE
156 | KRB4_CLEAR
157 | KRB4_SAFE
158 | KRB4_CONFIDENTIAL
159 | KRB4_PRIVATE
161 type curlClosePolicy =
162 | CLOSEPOLICY_OLDEST
163 | CLOSEPOLICY_LEAST_RECENTLY_USED
165 type curlSSLVerifyHost =
166 | SSLVERIFYHOST_NONE (** connection succeeds regardless of the names in the certificate *)
167 | SSLVERIFYHOST_EXISTENCE (** deprecated, equivalent to SSLVERIFYHOST_HOSTNAME *)
168 | SSLVERIFYHOST_HOSTNAME (** certificate must indicate the matching hostname, or the connection fails *)
170 type curlHTTPVersion =
171 | HTTP_VERSION_NONE (** libcurl will make the best choice *)
172 | HTTP_VERSION_1_0 (** please use HTTP 1.0 *)
173 | HTTP_VERSION_1_1 (** please use HTTP 1.1 *)
174 | HTTP_VERSION_2 (** please use HTTP 2 *)
175 | HTTP_VERSION_2TLS (** use version 2 for HTTPS, version 1.1 for HTTP *)
177 type curlDebugType =
178 | DEBUGTYPE_TEXT
179 | DEBUGTYPE_HEADER_IN
180 | DEBUGTYPE_HEADER_OUT
181 | DEBUGTYPE_DATA_IN
182 | DEBUGTYPE_DATA_OUT
183 | DEBUGTYPE_SSL_DATA_IN
184 | DEBUGTYPE_SSL_DATA_OUT
185 | DEBUGTYPE_END
187 type curlAuth =
188 | CURLAUTH_BASIC
189 | CURLAUTH_DIGEST
190 | CURLAUTH_GSSNEGOTIATE
191 | CURLAUTH_NTLM
192 | CURLAUTH_ANY
193 | CURLAUTH_ANYSAFE
195 type curlIPResolve =
196 | IPRESOLVE_WHATEVER
197 | IPRESOLVE_V4
198 | IPRESOLVE_V6
200 type curlFTPSSL =
201 | FTPSSL_NONE
202 | FTPSSL_TRY
203 | FTPSSL_CONTROL
204 | FTPSSL_ALL
206 type curlFTPSSLAuth =
207 | FTPAUTH_DEFAULT
208 | FTPAUTH_SSL
209 | FTPAUTH_TLS
211 type curlIOCmd =
212 | IOCMD_NOP
213 | IOCMD_RESTARTREAD
215 type curlIOErr =
216 | IOE_OK
217 | IOE_UNKNOWNCMD
218 | IOE_FAILRESTART
220 type curlSeekResult =
221 | SEEKFUNC_OK
222 | SEEKFUNC_FAIL
223 | SEEKFUNC_CANTSEEK
225 type curlFTPMethod =
226 | FTPMETHOD_DEFAULT
227 | FTPMETHOD_MULTICWD
228 | FTPMETHOD_NOCWD
229 | FTPMETHOD_SINGLECWD
231 type curlSSHAuthTypes =
232 | SSHAUTH_ANY
233 | SSHAUTH_PUBLICKEY
234 | SSHAUTH_PASSWORD
235 | SSHAUTH_HOST
236 | SSHAUTH_KEYBOARD
238 type curlFTPSSLCCC =
239 | FTPSSL_CCC_NONE
240 | FTPSSL_CCC_PASSIVE
241 | FTPSSL_CCC_ACTIVE
243 type curlSeek =
244 | SEEK_SET
245 | SEEK_CUR
246 | SEEK_END
248 type curlProxyType =
249 | CURLPROXY_HTTP
250 | CURLPROXY_HTTP_1_0 (** since libcurl 7.19.4 *)
251 | CURLPROXY_SOCKS4 (** since libcurl 7.15.2 *)
252 | CURLPROXY_SOCKS5
253 | CURLPROXY_SOCKS4A (** since libcurl 7.18.0 *)
254 | CURLPROXY_SOCKS5_HOSTNAME (** since libcurl 7.18.0 *)
256 type curlMIMEPartData =
257 | CURLMIME_DATA of string
258 | CURLMIME_FILEDATA of string
260 type curlMIMEEncoding =
261 | CURLMIME_8BIT
262 | CURLMIME_BINARY
263 | CURLMIME_7BIT
264 | CURLMIME_QUOTEDPRINTABLE
265 | CURLMIME_BASE64
266 | CURLMIME_NONE
268 type curlMIMEPart =
270 encoding: curlMIMEEncoding;
271 headers: string list;
272 subparts: curlMIMEPart list;
273 data: curlMIMEPartData;
276 type curlKHMatch =
277 | CURLKHMATCH_OK
278 | CURLKHMATCH_MISMATCH of string (* Base64-encoded *)
279 | CURLKHMATCH_MISSING
281 type curlKHStat =
282 | CURLKHSTAT_FINE_ADD_TO_FILE
283 | CURLKHSTAT_FINE
284 | CURLKHSTAT_REJECT
285 | CURLKHSTAT_DEFER
287 (** Protocols to enable (via CURLOPT_PROTOCOLS and CURLOPT_REDIR_PROTOCOLS) *)
288 type curlProto =
289 | CURLPROTO_ALL (** enable everything *)
290 | CURLPROTO_HTTP
291 | CURLPROTO_HTTPS
292 | CURLPROTO_FTP
293 | CURLPROTO_FTPS
294 | CURLPROTO_SCP
295 | CURLPROTO_SFTP
296 | CURLPROTO_TELNET
297 | CURLPROTO_LDAP
298 | CURLPROTO_LDAPS
299 | CURLPROTO_DICT
300 | CURLPROTO_FILE
301 | CURLPROTO_TFTP
302 | CURLPROTO_IMAP
303 | CURLPROTO_IMAPS
304 | CURLPROTO_POP3
305 | CURLPROTO_POP3S
306 | CURLPROTO_SMTP
307 | CURLPROTO_SMTPS
308 | CURLPROTO_RTSP
309 | CURLPROTO_RTMP
310 | CURLPROTO_RTMPT
311 | CURLPROTO_RTMPE
312 | CURLPROTO_RTMPTE
313 | CURLPROTO_RTMPS
314 | CURLPROTO_RTMPTS
315 | CURLPROTO_GOPHER
317 (** if flag is not supported by libcurl - enabling it does nothing *)
318 type curlPostRedir =
319 | REDIR_POST_ALL
320 | REDIR_POST_301
321 | REDIR_POST_302
322 | REDIR_POST_303 (** added in libcurl 7.26.0 *)
324 type curlOption =
325 | CURLOPT_WRITEFUNCTION of (string -> int)
326 | CURLOPT_READFUNCTION of (int -> string)
327 | CURLOPT_INFILESIZE of int
328 | CURLOPT_URL of string
329 | CURLOPT_PROXY of string
330 | CURLOPT_PROXYPORT of int
331 | CURLOPT_HTTPPROXYTUNNEL of bool
332 | CURLOPT_VERBOSE of bool
333 | CURLOPT_HEADER of bool
334 | CURLOPT_NOPROGRESS of bool
335 | CURLOPT_NOSIGNAL of bool
336 | CURLOPT_NOBODY of bool
337 | CURLOPT_FAILONERROR of bool
338 | CURLOPT_UPLOAD of bool
339 | CURLOPT_POST of bool
340 | CURLOPT_FTPLISTONLY of bool
341 | CURLOPT_FTPAPPEND of bool
342 | CURLOPT_NETRC of curlNETRCOption
343 | CURLOPT_ENCODING of curlEncoding
344 | CURLOPT_FOLLOWLOCATION of bool
345 | CURLOPT_TRANSFERTEXT of bool
346 | CURLOPT_PUT of bool
347 | CURLOPT_USERPWD of string
348 | CURLOPT_PROXYUSERPWD of string
349 | CURLOPT_RANGE of string
350 | CURLOPT_ERRORBUFFER of string ref
351 | CURLOPT_TIMEOUT of int
352 | CURLOPT_POSTFIELDS of string
353 | CURLOPT_POSTFIELDSIZE of int
354 | CURLOPT_REFERER of string
355 | CURLOPT_USERAGENT of string
356 | CURLOPT_FTPPORT of string
357 | CURLOPT_LOWSPEEDLIMIT of int
358 | CURLOPT_LOWSPEEDTIME of int
359 | CURLOPT_RESUMEFROM of int
360 | CURLOPT_COOKIE of string
361 | CURLOPT_HTTPHEADER of string list
362 | CURLOPT_HTTPPOST of curlHTTPPost list
363 | CURLOPT_SSLCERT of string
364 | CURLOPT_SSLCERTTYPE of string
365 | CURLOPT_SSLCERTPASSWD of string
366 | CURLOPT_SSLKEY of string
367 | CURLOPT_SSLKEYTYPE of string
368 | CURLOPT_SSLKEYPASSWD of string
369 | CURLOPT_SSLENGINE of string
370 | CURLOPT_SSLENGINEDEFAULT of bool
371 | CURLOPT_CRLF of bool
372 | CURLOPT_QUOTE of string list
373 | CURLOPT_POSTQUOTE of string list
374 | CURLOPT_HEADERFUNCTION of (string -> int)
375 | CURLOPT_COOKIEFILE of string
376 | CURLOPT_SSLVERSION of curlSSLVersion
377 | CURLOPT_TIMECONDITION of curlTimeCondition
378 | CURLOPT_TIMEVALUE of int32
379 | CURLOPT_CUSTOMREQUEST of string
380 | CURLOPT_INTERFACE of string
381 | CURLOPT_KRB4LEVEL of curlKRB4Level
382 | CURLOPT_PROGRESSFUNCTION of (float -> float -> float -> float -> bool)
383 | CURLOPT_SSLVERIFYPEER of bool
384 | CURLOPT_CAINFO of string
385 | CURLOPT_CAPATH of string
386 | CURLOPT_FILETIME of bool
387 | CURLOPT_MAXREDIRS of int
388 | CURLOPT_MAXCONNECTS of int
389 | CURLOPT_CLOSEPOLICY of curlClosePolicy
390 | CURLOPT_FRESHCONNECT of bool
391 | CURLOPT_FORBIDREUSE of bool
392 | CURLOPT_RANDOMFILE of string
393 | CURLOPT_EGDSOCKET of string
394 | CURLOPT_CONNECTTIMEOUT of int
395 | CURLOPT_HTTPGET of bool
396 | CURLOPT_SSLVERIFYHOST of curlSSLVerifyHost
397 | CURLOPT_COOKIEJAR of string
398 | CURLOPT_SSLCIPHERLIST of string
399 | CURLOPT_HTTPVERSION of curlHTTPVersion
400 | CURLOPT_FTPUSEEPSV of bool
401 | CURLOPT_DNSCACHETIMEOUT of int
402 | CURLOPT_DNSUSEGLOBALCACHE of bool
403 | CURLOPT_DEBUGFUNCTION of (t -> curlDebugType -> string -> unit)
404 | CURLOPT_PRIVATE of string (** doesn't employ libcurl's CURLOPT_PRIVATE *)
405 | CURLOPT_HTTP200ALIASES of string list
406 | CURLOPT_UNRESTRICTEDAUTH of bool
407 | CURLOPT_FTPUSEEPRT of bool
408 | CURLOPT_HTTPAUTH of curlAuth list
409 | CURLOPT_FTPCREATEMISSINGDIRS of bool
410 | CURLOPT_PROXYAUTH of curlAuth list
411 | CURLOPT_FTPRESPONSETIMEOUT of int
412 | CURLOPT_IPRESOLVE of curlIPResolve
413 | CURLOPT_MAXFILESIZE of int32
414 | CURLOPT_INFILESIZELARGE of int64
415 | CURLOPT_RESUMEFROMLARGE of int64
416 | CURLOPT_MAXFILESIZELARGE of int64
417 | CURLOPT_NETRCFILE of string
418 | CURLOPT_FTPSSL of curlFTPSSL
419 | CURLOPT_POSTFIELDSIZELARGE of int64
420 | CURLOPT_TCPNODELAY of bool
421 | CURLOPT_FTPSSLAUTH of curlFTPSSLAuth
422 | CURLOPT_IOCTLFUNCTION of (t -> curlIOCmd -> curlIOErr)
423 | CURLOPT_FTPACCOUNT of string
424 | CURLOPT_COOKIELIST of string
425 | CURLOPT_IGNORECONTENTLENGTH of bool
426 | CURLOPT_FTPSKIPPASVIP of bool
427 | CURLOPT_FTPFILEMETHOD of curlFTPMethod
428 | CURLOPT_LOCALPORT of int
429 | CURLOPT_LOCALPORTRANGE of int
430 | CURLOPT_CONNECTONLY of bool
431 | CURLOPT_MAXSENDSPEEDLARGE of int64
432 | CURLOPT_MAXRECVSPEEDLARGE of int64
433 | CURLOPT_FTPALTERNATIVETOUSER of string
434 | CURLOPT_SSLSESSIONIDCACHE of bool
435 | CURLOPT_SSHAUTHTYPES of curlSSHAuthTypes list
436 | CURLOPT_SSHPUBLICKEYFILE of string
437 | CURLOPT_SSHPRIVATEKEYFILE of string
438 | CURLOPT_FTPSSLCCC of curlFTPSSLCCC
439 | CURLOPT_TIMEOUTMS of int
440 | CURLOPT_CONNECTTIMEOUTMS of int
441 | CURLOPT_HTTPTRANSFERDECODING of bool
442 | CURLOPT_HTTPCONTENTDECODING of bool
443 | CURLOPT_NEWFILEPERMS of int
444 | CURLOPT_NEWDIRECTORYPERMS of int
445 | CURLOPT_POST301 of bool
446 | CURLOPT_SSHHOSTPUBLICKEYMD5 of string
447 | CURLOPT_COPYPOSTFIELDS of string
448 | CURLOPT_PROXYTRANSFERMODE of bool
449 | CURLOPT_SEEKFUNCTION of (int64 -> curlSeek -> curlSeekResult)
450 | CURLOPT_AUTOREFERER of bool
451 | CURLOPT_OPENSOCKETFUNCTION of (Unix.file_descr -> unit)
452 | CURLOPT_PROXYTYPE of curlProxyType
453 | CURLOPT_PROTOCOLS of curlProto list
454 | CURLOPT_REDIR_PROTOCOLS of curlProto list
455 | CURLOPT_RESOLVE of string list
456 | CURLOPT_DNS_SERVERS of string
457 | CURLOPT_MAIL_FROM of string
458 | CURLOPT_MAIL_RCPT of string list
459 | CURLOPT_PIPEWAIT of bool
460 | CURLOPT_CERTINFO of bool
461 | CURLOPT_USERNAME of string
462 | CURLOPT_PASSWORD of string
463 | CURLOPT_LOGIN_OPTIONS of string
464 | CURLOPT_CONNECT_TO of string list
465 | CURLOPT_POSTREDIR of curlPostRedir list
466 | CURLOPT_MIMEPOST of curlMIMEPart list (* @since libcurl 7.56.0 *)
467 | CURLOPT_SSHKNOWNHOSTS of string
468 | CURLOPT_SSHKEYFUNCTION of (curlKHMatch -> string (* raw *) -> curlKHStat)
470 type initOption =
471 | CURLINIT_GLOBALALL
472 | CURLINIT_GLOBALSSL
473 | CURLINIT_GLOBALWIN32
474 | CURLINIT_GLOBALNOTHING
476 type curlInfo =
477 | CURLINFO_EFFECTIVE_URL
478 | CURLINFO_HTTP_CODE
479 | CURLINFO_RESPONSE_CODE
480 | CURLINFO_TOTAL_TIME
481 | CURLINFO_NAMELOOKUP_TIME
482 | CURLINFO_CONNECT_TIME
483 | CURLINFO_PRETRANSFER_TIME
484 | CURLINFO_SIZE_UPLOAD
485 | CURLINFO_SIZE_DOWNLOAD
486 | CURLINFO_SPEED_DOWNLOAD
487 | CURLINFO_SPEED_UPLOAD
488 | CURLINFO_HEADER_SIZE
489 | CURLINFO_REQUEST_SIZE
490 | CURLINFO_SSL_VERIFYRESULT
491 | CURLINFO_FILETIME
492 | CURLINFO_CONTENT_LENGTH_DOWNLOAD
493 | CURLINFO_CONTENT_LENGTH_UPLOAD
494 | CURLINFO_STARTTRANSFER_TIME
495 | CURLINFO_CONTENT_TYPE
496 | CURLINFO_REDIRECT_TIME
497 | CURLINFO_REDIRECT_COUNT
498 | CURLINFO_PRIVATE (** returns value previously set with CURLOPT_PRIVATE, doesn't employ libcurl's CURLINFO_PRIVATE *)
499 | CURLINFO_HTTP_CONNECTCODE
500 | CURLINFO_HTTPAUTH_AVAIL
501 | CURLINFO_PROXYAUTH_AVAIL
502 | CURLINFO_OS_ERRNO
503 | CURLINFO_NUM_CONNECTS
504 | CURLINFO_SSL_ENGINES
505 | CURLINFO_COOKIELIST
506 | CURLINFO_LASTSOCKET
507 | CURLINFO_FTP_ENTRY_PATH
508 | CURLINFO_REDIRECT_URL
509 | CURLINFO_PRIMARY_IP
510 | CURLINFO_LOCAL_IP
511 | CURLINFO_LOCAL_PORT
512 | CURLINFO_CONDITION_UNMET
513 | CURLINFO_CERTINFO
515 type curlInfoResult =
516 | CURLINFO_String of string
517 | CURLINFO_Long of int
518 | CURLINFO_Double of float
519 | CURLINFO_StringList of string list
520 | CURLINFO_StringListList of string list list
522 type version_info = {
523 version : string;
524 number : int * int * int;
525 host : string;
526 features : string list;
527 ssl_version : string option;
528 libz_version : string option;
529 protocols : string list;
530 ares : string; (** starting from this field are optional features - may be empty/zero *)
531 ares_num : int;
532 libidn : string;
533 iconv_ver_num : int;
534 libssh_version : string;
537 type pauseOption = PAUSE_SEND | PAUSE_RECV | PAUSE_ALL
539 (** {2 curl_easy API} *)
541 val global_init : initOption -> unit
542 val global_cleanup : unit -> unit
543 val init : unit -> t
544 val reset : t -> unit
545 (** Reset [t] to the default state *)
546 val duphandle : t -> t [@@ocaml.deprecated "collect options and apply to fresh handle explicitly instead"]
547 (** Create the new handle, copying all the options from the supplied [t].
548 Note that it will also copy [set_writefunction] options and alike, as such both
549 handles (original and new one) will be referencing the same closures, potentially
550 sharing some state, which may lead to surprising results.
551 @deprecated collect options and apply to fresh handle explicitly instead, see also https://github.com/ygrek/ocurl/issues/31
553 val setopt : t -> curlOption -> unit
554 (** @raise NotImplemented for not implemented option *)
555 val perform : t -> unit
556 val cleanup : t -> unit
557 val getinfo : t -> curlInfo -> curlInfoResult
558 val escape : string -> string
559 val unescape : string -> string
560 val getdate : string -> float -> float
561 val version : unit -> string
562 val strerror : curlCode -> string
563 val int_of_curlCode : curlCode -> int
564 val curlCode_of_int : int -> curlCode option
565 (** same as [int_of_curlCode] *)
566 val errno : curlCode -> int
567 val version_info : unit -> version_info
568 val pause : t -> pauseOption list -> unit
570 (** {2 Set transfer options}
572 All callback functions shouldn't raise exceptions.
573 Any exception raised in callback function will be silently caught and discared,
574 and transfer will be aborted. *)
576 val set_writefunction : t -> (string -> int) -> unit
577 val set_readfunction : t -> (int -> string) -> unit
578 (** [readfunction n] should return string of length at most [n], otherwise
579 transfer will be aborted (as if with exception) *)
580 val set_infilesize : t -> int -> unit
581 val set_url : t -> string -> unit
582 val set_proxy : t -> string -> unit
583 val set_proxyport : t -> int -> unit
584 val set_httpproxytunnel : t -> bool -> unit
585 val set_verbose : t -> bool -> unit
586 val set_header : t -> bool -> unit
587 val set_noprogress : t -> bool -> unit
588 val set_nosignal : t -> bool -> unit
589 val set_nobody : t -> bool -> unit
590 val set_failonerror : t -> bool -> unit
591 val set_upload : t -> bool -> unit
592 val set_post : t -> bool -> unit
593 val set_ftplistonly : t -> bool -> unit
594 val set_ftpappend : t -> bool -> unit
595 val set_netrc : t -> curlNETRCOption -> unit
596 val set_encoding : t -> curlEncoding -> unit
597 val set_followlocation : t -> bool -> unit
598 val set_transfertext : t -> bool -> unit
599 val set_put : t -> bool -> unit
600 val set_userpwd : t -> string -> unit
601 val set_proxyuserpwd : t -> string -> unit
602 val set_range : t -> string -> unit
603 val set_errorbuffer : t -> string ref -> unit
604 val set_timeout : t -> int -> unit
605 val set_postfields : t -> string -> unit
606 val set_postfieldsize : t -> int -> unit
607 val set_referer : t -> string -> unit
608 val set_useragent : t -> string -> unit
609 val set_ftpport : t -> string -> unit
610 val set_lowspeedlimit : t -> int -> unit
611 val set_lowspeedtime : t -> int -> unit
612 val set_resumefrom : t -> int -> unit
613 val set_cookie : t -> string -> unit
614 val set_httpheader : t -> string list -> unit
615 val set_httppost : t -> curlHTTPPost list -> unit
616 val set_sslcert : t -> string -> unit
617 val set_sslcerttype : t -> string -> unit
618 val set_sslcertpasswd : t -> string -> unit
619 val set_sslkey : t -> string -> unit
620 val set_sslkeytype : t -> string -> unit
621 val set_sslkeypasswd : t -> string -> unit
622 val set_sslengine : t -> string -> unit
623 val set_sslenginedefault : t -> bool -> unit
624 val set_certinfo : t -> bool -> unit
625 val set_crlf : t -> bool -> unit
626 val set_quote : t -> string list -> unit
627 val set_postquote : t -> string list -> unit
628 val set_headerfunction: t -> (string -> int) -> unit
629 val set_cookiefile : t -> string -> unit
630 val set_sslversion : t -> curlSSLVersion -> unit
631 val set_timecondition : t -> curlTimeCondition -> unit
632 val set_timevalue : t -> int32 -> unit
633 val set_customrequest : t -> string -> unit
634 val set_interface : t -> string -> unit
635 val set_krb4level : t -> curlKRB4Level -> unit
636 val set_progressfunction : t -> (float -> float -> float -> float -> bool) -> unit
637 val set_sslverifypeer : t -> bool -> unit
638 val set_cainfo : t -> string -> unit
639 val set_capath : t -> string -> unit
640 val set_filetime : t -> bool -> unit
641 val set_maxredirs : t -> int -> unit
642 val set_maxconnects : t -> int -> unit
643 val set_closepolicy : t -> curlClosePolicy -> unit
644 val set_freshconnect : t -> bool -> unit
645 val set_forbidreuse : t -> bool -> unit
646 val set_randomfile : t -> string -> unit
647 val set_egdsocket : t -> string -> unit
648 val set_connecttimeout : t -> int -> unit
649 val set_httpget : t -> bool -> unit
650 val set_sslverifyhost : t -> curlSSLVerifyHost -> unit
651 val set_cookiejar : t -> string -> unit
652 val set_sslcipherlist : t -> string -> unit
653 val set_httpversion : t -> curlHTTPVersion -> unit
654 val set_ftpuseepsv : t -> bool -> unit
655 val set_dnscachetimeout : t -> int -> unit
656 val set_dnsuseglobalcache : t -> bool -> unit
657 val set_debugfunction : t -> (t -> curlDebugType -> string -> unit) -> unit
658 val set_private : t -> string -> unit
659 val set_http200aliases : t -> string list -> unit
660 val set_unrestrictedauth : t -> bool -> unit
661 val set_ftpuseeprt : t -> bool -> unit
662 val set_httpauth : t -> curlAuth list -> unit
663 val set_ftpcreatemissingdirs : t -> bool -> unit
664 val set_proxyauth : t -> curlAuth list -> unit
665 val set_ftpresponsetimeout : t -> int -> unit
666 val set_ipresolve : t -> curlIPResolve -> unit
667 val set_maxfilesize : t -> int32 -> unit
668 val set_infilesizelarge : t -> int64 -> unit
669 val set_resumefromlarge : t -> int64 -> unit
670 val set_maxfilesizelarge : t -> int64 -> unit
671 val set_netrcfile : t -> string -> unit
672 val set_ftpssl : t -> curlFTPSSL -> unit
673 val set_postfieldsizelarge : t -> int64 -> unit
674 val set_tcpnodelay : t -> bool -> unit
675 val set_ftpsslauth : t -> curlFTPSSLAuth -> unit
676 val set_ioctlfunction : t -> (t -> curlIOCmd -> curlIOErr) -> unit
677 val set_ftpaccount : t -> string -> unit
678 val set_cookielist : t -> string -> unit
679 val set_ignorecontentlength : t -> bool -> unit
680 val set_ftpskippasvip : t -> bool -> unit
681 val set_ftpfilemethod : t -> curlFTPMethod -> unit
682 val set_localport : t -> int -> unit
683 val set_localportrange : t -> int -> unit
684 val set_connectonly : t -> bool -> unit
685 val set_maxsendspeedlarge : t -> int64 -> unit
686 val set_maxrecvspeedlarge : t -> int64 -> unit
687 val set_ftpalternativetouser : t -> string -> unit
688 val set_sslsessionidcache : t -> bool -> unit
689 val set_sshauthtypes : t -> curlSSHAuthTypes list -> unit
690 val set_sshpublickeyfile : t -> string -> unit
691 val set_sshprivatekeyfile : t -> string -> unit
692 val set_ftpsslccc : t -> curlFTPSSLCCC -> unit
693 val set_timeoutms : t -> int -> unit
694 val set_connecttimeoutms : t -> int -> unit
695 val set_httptransferdecoding : t -> bool -> unit
696 val set_httpcontentdecoding : t -> bool -> unit
697 val set_newfileperms : t -> int -> unit
698 val set_newdirectoryperms : t -> int -> unit
699 val set_post301 : t -> bool -> unit
700 val set_sshhostpublickeymd5 : t -> string -> unit
701 val set_copypostfields : t -> string -> unit
702 val set_proxytransfermode : t -> bool -> unit
703 val set_seekfunction : t -> (int64 -> curlSeek -> curlSeekResult) -> unit
704 val set_autoreferer : t -> bool -> unit
705 val set_opensocketfunction : t -> (Unix.file_descr -> unit) -> unit
706 val set_proxytype : t -> curlProxyType -> unit
707 val set_protocols : t -> curlProto list -> unit
708 val set_redirprotocols : t -> curlProto list -> unit
710 (** [set_resolve t add del] adjusts builtin dns mapping
712 @param add is the (host,port,address) list to add to dns mapping
713 @param del is the (host,port) list to remove from mapping
715 val set_resolve : t -> (string * int * string) list -> (string * int) list -> unit
716 val set_dns_servers : t -> string list -> unit
717 val set_mailfrom : t -> string -> unit
718 val set_mailrcpt : t -> string list -> unit
719 val set_pipewait : t -> bool -> unit
720 val set_username : t -> string -> unit
721 (** @since 0.8.0 *)
722 val set_password : t -> string -> unit
723 (** @since 0.8.0 *)
724 val set_login_options : t -> string -> unit
725 (** @since 0.8.0 *)
726 val set_connect_to : t -> string list -> unit
727 (** @since 0.8.0 *)
728 val set_postredir : t -> curlPostRedir list -> unit
729 (** @since 0.8.1 *)
730 val set_mimepost : t -> curlMIMEPart list -> unit
731 (** @since 0.8.2 *)
733 val set_sshknownhosts : t -> string -> unit
734 val set_sshkeyfunction : t -> (curlKHMatch -> string -> curlKHStat) -> unit
736 (** {2 Get transfer properties} *)
738 val get_effectiveurl : t -> string
739 val get_redirecturl : t -> string
740 val get_httpcode : t -> int
741 val get_responsecode : t -> int
742 val get_totaltime : t -> float
743 val get_namelookuptime : t -> float
744 val get_connecttime : t -> float
745 val get_pretransfertime : t -> float
746 val get_sizeupload : t -> float
747 val get_sizedownload : t -> float
748 val get_speeddownload : t -> float
749 val get_speedupload : t -> float
750 val get_headersize : t -> int
751 val get_requestsize : t -> int
752 val get_sslverifyresult : t -> int
753 val get_filetime : t -> float
754 val get_contentlengthdownload : t -> float
755 val get_contentlengthupload : t -> float
756 val get_starttransfertime : t -> float
757 val get_contenttype : t -> string
758 val get_redirecttime : t -> float
759 val get_redirectcount : t -> int
760 val get_private : t -> string
761 val get_httpconnectcode : t -> int
762 val get_httpauthavail : t -> curlAuth list
763 val get_proxyauthavail : t -> curlAuth list
764 val get_oserrno : t -> int
765 val get_numconnects : t -> int
766 val get_sslengines : t -> string list
767 val get_cookielist : t -> string list
768 val get_lastsocket : t -> int
769 val get_ftpentrypath : t -> string
770 val get_primaryip : t -> string
771 val get_localip : t -> string
772 (** @since 0.5.5 (libcurl 7.21.0) *)
773 val get_localport : t -> int
774 (** @since 0.5.5 (libcurl 7.21.0) *)
775 val get_conditionunmet : t -> bool
776 (** @since 0.6.1 (libcurl 7.19.4) *)
777 val get_certinfo : t -> string list list
779 (** {2 Object interface} *)
781 class handle :
782 object ('a)
783 val conn : t
784 method handle : t
785 method cleanup : unit
786 method duphandle : 'a
787 method perform : unit
789 method set_writefunction : (string -> int) -> unit
790 method set_readfunction : (int -> string) -> unit
791 method set_infilesize : int -> unit
792 method set_url : string -> unit
793 method set_proxy : string -> unit
794 method set_proxyport : int -> unit
795 method set_httpproxytunnel : bool -> unit
796 method set_verbose : bool -> unit
797 method set_header : bool -> unit
798 method set_noprogress : bool -> unit
799 method set_nosignal : bool -> unit
800 method set_nobody : bool -> unit
801 method set_failonerror : bool -> unit
802 method set_upload : bool -> unit
803 method set_post : bool -> unit
804 method set_ftplistonly : bool -> unit
805 method set_ftpappend : bool -> unit
806 method set_netrc : curlNETRCOption -> unit
807 method set_encoding : curlEncoding -> unit
808 method set_followlocation : bool -> unit
809 method set_transfertext : bool -> unit
810 method set_put : bool -> unit
811 method set_userpwd : string -> unit
812 method set_proxyuserpwd : string -> unit
813 method set_range : string -> unit
814 method set_errorbuffer : string ref -> unit
815 method set_timeout : int -> unit
816 method set_postfields : string -> unit
817 method set_postfieldsize : int -> unit
818 method set_referer : string -> unit
819 method set_useragent : string -> unit
820 method set_ftpport : string -> unit
821 method set_lowspeedlimit : int -> unit
822 method set_lowspeedtime : int -> unit
823 method set_resumefrom : int -> unit
824 method set_cookie : string -> unit
825 method set_httpheader : string list -> unit
826 method set_httppost : curlHTTPPost list -> unit
827 method set_sslcert : string -> unit
828 method set_sslcerttype : string -> unit
829 method set_sslcertpasswd : string -> unit
830 method set_sslkey : string -> unit
831 method set_sslkeytype : string -> unit
832 method set_sslkeypasswd : string -> unit
833 method set_sslengine : string -> unit
834 method set_sslenginedefault : bool -> unit
835 method set_certinfo : bool -> unit
836 method set_crlf : bool -> unit
837 method set_quote : string list -> unit
838 method set_postquote : string list -> unit
839 method set_headerfunction: (string -> int) -> unit
840 method set_cookiefile : string -> unit
841 method set_sslversion : curlSSLVersion -> unit
842 method set_timecondition : curlTimeCondition -> unit
843 method set_timevalue : int32 -> unit
844 method set_customrequest : string -> unit
845 method set_interface : string -> unit
846 method set_krb4level : curlKRB4Level -> unit
847 method set_progressfunction :
848 (float -> float -> float -> float -> bool) -> unit
849 method set_sslverifypeer : bool -> unit
850 method set_cainfo : string -> unit
851 method set_capath : string -> unit
852 method set_filetime : bool -> unit
853 method set_maxredirs : int -> unit
854 method set_maxconnects : int -> unit
855 method set_closepolicy : curlClosePolicy -> unit
856 method set_freshconnect : bool -> unit
857 method set_forbidreuse : bool -> unit
858 method set_randomfile : string -> unit
859 method set_egdsocket : string -> unit
860 method set_connecttimeout : int -> unit
861 method set_httpget : bool -> unit
862 method set_sslverifyhost : curlSSLVerifyHost -> unit
863 method set_cookiejar : string -> unit
864 method set_sslcipherlist : string -> unit
865 method set_httpversion : curlHTTPVersion -> unit
866 method set_ftpuseepsv : bool -> unit
867 method set_dnscachetimeout : int -> unit
868 method set_dnsuseglobalcache : bool -> unit
869 method set_debugfunction : (t -> curlDebugType -> string -> unit) -> unit
870 method set_private : string -> unit
871 method set_http200aliases : string list -> unit
872 method set_unrestrictedauth : bool -> unit
873 method set_ftpuseeprt : bool -> unit
874 method set_httpauth : curlAuth list -> unit
875 method set_ftpcreatemissingdirs : bool -> unit
876 method set_proxyauth : curlAuth list -> unit
877 method set_ftpresponsetimeout : int -> unit
878 method set_ipresolve : curlIPResolve -> unit
879 method set_maxfilesize : int32 -> unit
880 method set_infilesizelarge : int64 -> unit
881 method set_resumefromlarge : int64 -> unit
882 method set_maxfilesizelarge : int64 -> unit
883 method set_netrcfile : string -> unit
884 method set_ftpssl : curlFTPSSL -> unit
885 method set_postfieldsizelarge : int64 -> unit
886 method set_tcpnodelay : bool -> unit
887 method set_ftpsslauth : curlFTPSSLAuth -> unit
888 method set_ioctlfunction : (t -> curlIOCmd -> curlIOErr) -> unit
889 method set_ftpaccount : string -> unit
890 method set_cookielist : string -> unit
891 method set_ignorecontentlength : bool -> unit
892 method set_ftpskippasvip : bool -> unit
893 method set_ftpfilemethod : curlFTPMethod -> unit
894 method set_localport : int -> unit
895 method set_localportrange : int -> unit
896 method set_connectonly : bool -> unit
897 method set_maxsendspeedlarge : int64 -> unit
898 method set_maxrecvspeedlarge : int64 -> unit
899 method set_ftpalternativetouser : string -> unit
900 method set_sslsessionidcache : bool -> unit
901 method set_sshauthtypes : curlSSHAuthTypes list -> unit
902 method set_sshpublickeyfile : string -> unit
903 method set_sshprivatekeyfile : string -> unit
904 method set_ftpsslccc : curlFTPSSLCCC -> unit
905 method set_timeoutms : int -> unit
906 method set_connecttimeoutms : int -> unit
907 method set_httptransferdecoding : bool -> unit
908 method set_httpcontentdecoding : bool -> unit
909 method set_newfileperms : int -> unit
910 method set_newdirectoryperms : int -> unit
911 method set_post301 : bool -> unit
912 method set_sshhostpublickeymd5 : string -> unit
913 method set_copypostfields : string -> unit
914 method set_proxytransfermode : bool -> unit
915 method set_seekfunction : (int64 -> curlSeek -> curlSeekResult) -> unit
916 method set_autoreferer : bool -> unit
917 method set_opensocketfunction : (Unix.file_descr -> unit) -> unit
918 method set_proxytype : curlProxyType -> unit
919 method set_resolve : (string * int * string) list -> (string * int) list -> unit
920 method set_dns_servers : string list -> unit
921 method set_mimepost : curlMIMEPart list -> unit
922 method set_sshknownhosts : string -> unit
923 method set_sshkeyfunction : (curlKHMatch -> string -> curlKHStat) -> unit
925 method get_effectiveurl : string
926 method get_redirecturl : string
927 method get_httpcode : int
928 method get_responsecode : int
929 method get_totaltime : float
930 method get_namelookuptime : float
931 method get_connecttime : float
932 method get_pretransfertime : float
933 method get_sizeupload : float
934 method get_sizedownload : float
935 method get_speeddownload : float
936 method get_speedupload : float
937 method get_headersize : int
938 method get_requestsize : int
939 method get_sslverifyresult : int
940 method get_filetime : float
941 method get_contentlengthdownload : float
942 method get_contentlengthupload : float
943 method get_starttransfertime : float
944 method get_contenttype : string
945 method get_redirecttime : float
946 method get_redirectcount : int
947 method get_private : string
948 method get_httpconnectcode : int
949 method get_httpauthavail : curlAuth list
950 method get_proxyauthavail : curlAuth list
951 method get_oserrno : int
952 method get_numconnects : int
953 method get_sslengines : string list
954 method get_cookielist : string list
955 method get_lastsocket : int
956 method get_ftpentrypath : string
957 method get_primaryip : string
958 method get_localip : string
959 method get_localport : int
960 method get_conditionunmet : bool
961 method get_certinfo : string list list
964 (** {2 curl_multi API} *)
966 (** Curl multi stack. Functions may raise [Failure] on critical errors *)
967 module Multi : sig
969 (** type of Curl multi stack *)
970 type mt
972 type curlPipelining = PIPE_NOTHING | PIPE_HTTP1 | PIPE_MULTIPLEX
974 type curlMultiOption =
975 | CURLMOPT_PIPELINING of curlPipelining list
976 | CURLMOPT_MAXCONNECTS of int
977 | CURLMOPT_MAX_PIPELINE_LENGTH of int
978 | CURLMOPT_MAX_HOST_CONNECTIONS of int
980 (** exception raised on internal errors *)
981 exception Error of string
983 (** create new multi stack *)
984 val create : unit -> mt
986 (** add handle to multi stack *)
987 val add : mt -> t -> unit
989 (** remove handle from multi stack (effectively halting the transfer) *)
990 val remove : mt -> t -> unit
992 (** perform pending data transfers (if any) on all handles currently in multi stack
993 @return the number of handles that still transfer data *)
994 val perform : mt -> int
996 (** wait till there are some active data transfers on multi stack
997 @return whether [perform] should be called *)
998 val wait : ?timeout_ms:int -> mt -> bool
1000 (** remove finished handle from the multi stack if any. The returned handle may be reused *)
1001 val remove_finished : mt -> (t * curlCode) option
1003 (** destroy multi handle (all transfers are stopped, but individual {!type: Curl.t} handles can be reused) *)
1004 val cleanup : mt -> unit
1006 (** events that should be reported for the socket *)
1007 type poll =
1008 | POLL_NONE (** none *)
1009 | POLL_IN (** available for reading *)
1010 | POLL_OUT (** available for writing *)
1011 | POLL_INOUT (** both *)
1012 | POLL_REMOVE (** socket not needed anymore *)
1014 (** socket status *)
1015 type fd_status =
1016 | EV_AUTO (** determine socket status automatically (with extra system call) *)
1017 | EV_IN (** socket has incoming data *)
1018 | EV_OUT (** socket is available for writing *)
1019 | EV_INOUT (** both *)
1021 (** set the function to receive notifications on what socket events
1022 are currently interesting for libcurl on the specified socket handle *)
1023 val set_socket_function : mt -> (Unix.file_descr -> poll -> unit) -> unit
1025 (** set the function to receive notification when libcurl internal timeout changes,
1026 timeout value is in milliseconds
1028 NB {!action_timeout} should be called when timeout occurs *)
1029 val set_timer_function : mt -> (int -> unit) -> unit
1031 (** perform pending data transfers (if any) on all handles currently in multi stack
1032 (not recommended, {!action} should be used instead)
1033 @return the number of handles that still transfer data
1034 @raise Error on errors
1036 val action_all : mt -> int
1038 (** inform libcurl that timeout occured
1039 @raise Error on errors
1041 val action_timeout : mt -> unit
1043 (** [action mt fd status] informs libcurl about event on the specified socket.
1044 [status] specifies socket status. Perform pending data transfers.
1045 @return the number of handles still active
1046 @raise Error on errors
1048 val action : mt -> Unix.file_descr -> fd_status -> int
1050 (** [timeout mt] polls multi handle for timeout (not recommended, use {!set_timer_function} instead).
1051 @return maximum allowed number of milliseconds to wait before calling libcurl to perform actions
1052 @raise Error on errors
1054 external timeout : mt -> int = "caml_curl_multi_timeout"
1056 (** @raise NotImplemented for not implemented option *)
1057 val setopt : mt -> curlMultiOption -> unit