TTYPE * * The format of your client certificate used when connecting to an HTTPS proxy. * Supported formats are "PEM" and "DER", except with Secure Transport. * OpenSSL (versions 0.9.3 and later) and Secure Transport * (on iOS 5 or later, or OS X 10.7 or later) also support "P12" for * PKCS#12-encoded files. Defaults to "PEM". * * * Available since PHP 7.3.0 and libcurl >= cURL 7.52.0. * * * * CURLOPT_PROXY_SSL_CIPHER_LIST * * The list of ciphers to use for the connection to the HTTPS proxy. * The list must be syntactically correct, it consists of one or more cipher * strings separated by colons. Commas or spaces are also acceptable separators * but colons are normally used, !, - and + can be used as operators. * * * Available since PHP 7.3.0 and libcurl >= cURL 7.52.0. * * * * CURLOPT_PROXY_TLS13_CIPHERS * * The list of cipher suites to use for the TLS 1.3 connection to a proxy. * The list must be syntactically correct, it consists of one or more * cipher suite strings separated by colons. This option is currently used * only when curl is built to use OpenSSL 1.1.1 or later. * If you are using a different SSL backend you can try setting * TLS 1.3 cipher suites by using the CURLOPT_PROXY_SSL_CIPHER_LIST option. * * * Available since PHP 7.3.0 and libcurl >= cURL 7.61.0. Available when built with OpenSSL >= 1.1.1. * * * * CURLOPT_PROXY_SSLKEY * * The file name of your private key used for connecting to the HTTPS proxy. * The default format is "PEM" and can be changed with * CURLOPT_PROXY_SSLKEYTYPE. * (iOS and Mac OS X only) This option is ignored if curl was built against Secure Transport. * * * Available since PHP 7.3.0 and libcurl >= cURL 7.52.0. Available if built TLS enabled. * * * * CURLOPT_PROXY_SSLKEYTYPE * * The format of your private key. Supported formats are "PEM", "DER" and "ENG". * * * Available since PHP 7.3.0 and libcurl >= cURL 7.52.0. * * * * CURLOPT_PROXY_TLSAUTH_PASSWORD * * The password to use for the TLS authentication method specified with the * CURLOPT_PROXY_TLSAUTH_TYPE option. Requires that the * CURLOPT_PROXY_TLSAUTH_USERNAME option to also be set. * * * Available since PHP 7.3.0 and libcurl >= cURL 7.52.0. * * * * CURLOPT_PROXY_TLSAUTH_TYPE * * The method of the TLS authentication used for the HTTPS connection. Supported method is "SRP". * * * Secure Remote Password (SRP) authentication for TLS provides mutual authentication * if both sides have a shared secret. To use TLS-SRP, you must also set the * CURLOPT_PROXY_TLSAUTH_USERNAME and * CURLOPT_PROXY_TLSAUTH_PASSWORD options. * * * * * Available since PHP 7.3.0 and libcurl >= cURL 7.52.0. * * * * CURLOPT_PROXY_TLSAUTH_USERNAME * * Tusername to use for the HTTPS proxy TLS authentication method specified with the * CURLOPT_PROXY_TLSAUTH_TYPE option. Requires that the * CURLOPT_PROXY_TLSAUTH_PASSWORD option to also be set. * * * Available since PHP 7.3.0 and libcurl >= cURL 7.52.0. * * * * CURLOPT_PROXYUSERPWD * * A username and password formatted as * "[username]:[password]" to use for the * connection to the proxy. * * * * * * CURLOPT_RANDOM_FILE * * A filename to be used to seed the random number generator for SSL. * * * * * * CURLOPT_RANGE * * Range(s) of data to retrieve in the format * "X-Y" where X or Y are optional. HTTP transfers * also support several intervals, separated with commas in the format * "X-Y,N-M". * * * * * * CURLOPT_REFERER * * The contents of the "Referer: " header to be used * in a HTTP request. * * * * * * CURLOPT_SERVICE_NAME * * The authentication service name. * * * Added in cURL 7.43.0. Available since PHP 7.0.7. * * * * CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 * * A string containing 32 hexadecimal digits. The string should be the * MD5 checksum of the remote host's public key, and libcurl will reject * the connection to the host unless the md5sums match. * This option is only for SCP and SFTP transfers. * * * Added in cURL 7.17.1. * * * * CURLOPT_SSH_PUBLIC_KEYFILE * * The file name for your public key. If not used, libcurl defaults to * $HOME/.ssh/id_dsa.pub if the HOME environment variable is set, * and just "id_dsa.pub" in the current directory if HOME is not set. * * * Added in cURL 7.16.1. * * * * CURLOPT_SSH_PRIVATE_KEYFILE * * The file name for your private key. If not used, libcurl defaults to * $HOME/.ssh/id_dsa if the HOME environment variable is set, * and just "id_dsa" in the current directory if HOME is not set. * If the file is password-protected, set the password with * CURLOPT_KEYPASSWD. * * * Added in cURL 7.16.1. * * * * CURLOPT_SSL_CIPHER_LIST * * A list of ciphers to use for SSL. For example, * RC4-SHA and TLSv1 are valid * cipher lists. * * * * * * CURLOPT_SSLCERT * * The name of a file containing a PEM formatted certificate. * * * * * * CURLOPT_SSLCERTPASSWD * * The password required to use the * CURLOPT_SSLCERT certificate. * * * * * * CURLOPT_SSLCERTTYPE * * The format of the certificate. Supported formats are * "PEM" (default), "DER", * and "ENG". * As of OpenSSL 0.9.3, "P12" (for PKCS#12-encoded files) * is also supported. * * * Added in cURL 7.9.3. * * * * CURLOPT_SSLENGINE * * The identifier for the crypto engine of the private SSL key * specified in CURLOPT_SSLKEY. * * * * * * CURLOPT_SSLENGINE_DEFAULT * * The identifier for the crypto engine used for asymmetric crypto * operations. * * * * * * CURLOPT_SSLKEY * * The name of a file containing a private SSL key. * * * * * * CURLOPT_SSLKEYPASSWD * * The secret password needed to use the private SSL key specified in * CURLOPT_SSLKEY. * * * Since this option contains a sensitive password, remember to keep * the PHP script it is contained within safe. * * * * * * * * CURLOPT_SSLKEYTYPE * * The key type of the private SSL key specified in * CURLOPT_SSLKEY. Supported key types are * "PEM" (default), "DER", * and "ENG". * * * * * * CURLOPT_TLS13_CIPHERS * * The list of cipher suites to use for the TLS 1.3 connection. The list must be * syntactically correct, it consists of one or more cipher suite strings separated by colons. * This option is currently used only when curl is built to use OpenSSL 1.1.1 or later. * If you are using a different SSL backend you can try setting * TLS 1.3 cipher suites by using the CURLOPT_SSL_CIPHER_LIST option. * * * Available since PHP 7.3.0 and libcurl >= cURL 7.61.0. Available when built with OpenSSL >= 1.1.1. * * * * CURLOPT_UNIX_SOCKET_PATH * * Enables the use of Unix domain sockets as connection endpoint and * sets the path to the given string. * * * Added in cURL 7.40.0. Available since PHP 7.0.7. * * * * CURLOPT_URL * * The URL to fetch. This can also be set when initializing a * session with curl_init. * * * * * * CURLOPT_USERAGENT * * The contents of the "User-Agent: " header to be * used in a HTTP request. * * * * * * CURLOPT_USERNAME * * The user name to use in authentication. * * * Added in cURL 7.19.1. Available since PHP 5.5.0. * * * * CURLOPT_USERPWD * * A username and password formatted as * "[username]:[password]" to use for the * connection. * * * * * * CURLOPT_XOAUTH2_BEARER * * Specifies the OAuth 2.0 access token. * * * Added in cURL 7.33.0. Available since PHP 7.0.7. * * * * * * * A custom request method to use instead of * "GET" or "HEAD" when doing * a HTTP request. This is useful for doing * "DELETE" or other, more obscure HTTP requests. * Valid values are things like "GET", * "POST", "CONNECT" and so on; * i.e. Do not enter a whole HTTP request line here. For instance, * entering "GET /index.html HTTP/1.0\r\n\r\n" * would be incorrect. * * * Don't do this without making sure the server supports the custom * request method first. * * * * Don't do this without making sure the server supports the custom * request method first. * * The default protocol to use if the URL is missing a scheme name. * * Set the name of the network interface that the DNS resolver should bind to. * This must be an interface name (not an address). * * Set the local IPv4 address that the resolver should bind to. The argument * should contain a single numerical IPv4 address as a string. * * Set the local IPv6 address that the resolver should bind to. The argument * should contain a single numerical IPv6 address as a string. * * Secure Remote Password (SRP) authentication for TLS provides mutual authentication * if both sides have a shared secret. To use TLS-SRP, you must also set the * CURLOPT_PROXY_TLSAUTH_USERNAME and * CURLOPT_PROXY_TLSAUTH_PASSWORD options. * * The secret password needed to use the private SSL key specified in * CURLOPT_SSLKEY. * * * Since this option contains a sensitive password, remember to keep * the PHP script it is contained within safe. * * * * Since this option contains a sensitive password, remember to keep * the PHP script it is contained within safe. * * value should be an array for the * following values of the option parameter: * * * * * Option * Set value to * Notes * * * * * CURLOPT_CONNECT_TO * * Connect to a specific host and port instead of the URL's host and port. * Accepts an array of strings with the format * HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT. * * * Added in cURL 7.49.0. Available since PHP 7.0.7. * * * * CURLOPT_HTTP200ALIASES * * An array of HTTP 200 responses that will be treated as valid * responses and not as errors. * * * Added in cURL 7.10.3. * * * * CURLOPT_HTTPHEADER * * An array of HTTP header fields to set, in the format * * array('Content-type: text/plain', 'Content-length: 100') * * * * * * * CURLOPT_POSTQUOTE * * An array of FTP commands to execute on the server after the FTP * request has been performed. * * * * * * CURLOPT_PROXYHEADER * * An array of custom HTTP headers to pass to proxies. * * * Added in cURL 7.37.0. Available since PHP 7.0.7. * * * * CURLOPT_QUOTE * * An array of FTP commands to execute on the server prior to the FTP * request. * * * * * * CURLOPT_RESOLVE * * Provide a custom address for a specific host and port pair. An array * of hostname, port, and IP address strings, each element separated by * a colon. In the format: * * array("example.com:80:127.0.0.1") * * * * Added in cURL 7.21.3. Available since PHP 5.5.0. * * * * * * * value should be a stream resource (using * fopen, for example) for the following values of the * option parameter: * * * * * Option * Set value to * * * * * CURLOPT_FILE * * The file that the transfer should be written to. The default * is STDOUT (the browser window). * * * * CURLOPT_INFILE * * The file that the transfer should be read from when uploading. * * * * CURLOPT_STDERR * * An alternative location to output errors to instead of * STDERR. * * * * CURLOPT_WRITEHEADER * * The file that the header part of the transfer is written to. * * * * * * * value should be the name of a valid function or a Closure * for the following values of the option parameter: * * * * * Option * Set value to * * * * * CURLOPT_HEADERFUNCTION * * A callback accepting two parameters. * The first is the cURL resource, the second is a * string with the header data to be written. The header data must * be written by this callback. Return the number of * bytes written. * * * * CURLOPT_PASSWDFUNCTION * * A callback accepting three parameters. * The first is the cURL resource, the second is a * string containing a password prompt, and the third is the maximum * password length. Return the string containing the password. * * * * CURLOPT_PROGRESSFUNCTION * * * A callback accepting five parameters. * The first is the cURL resource, the second is the total number of * bytes expected to be downloaded in this transfer, the third is * the number of bytes downloaded so far, the fourth is the total * number of bytes expected to be uploaded in this transfer, and the * fifth is the number of bytes uploaded so far. * * * * The callback is only called when the CURLOPT_NOPROGRESS * option is set to FALSE. * * * * Return a non-zero value to abort the transfer. In which case, the * transfer will set a CURLE_ABORTED_BY_CALLBACK * error. * * * * * CURLOPT_READFUNCTION * * A callback accepting three parameters. * The first is the cURL resource, the second is a * stream resource provided to cURL through the option * CURLOPT_INFILE, and the third is the maximum * amount of data to be read. The callback must return a string * with a length equal or smaller than the amount of data requested, * typically by reading it from the passed stream resource. It should * return an empty string to signal EOF. * * * * CURLOPT_WRITEFUNCTION * * A callback accepting two parameters. * The first is the cURL resource, and the second is a * string with the data to be written. The data must be saved by * this callback. It must return the exact number of bytes written * or the transfer will be aborted with an error. * * * * * * * A callback accepting five parameters. * The first is the cURL resource, the second is the total number of * bytes expected to be downloaded in this transfer, the third is * the number of bytes downloaded so far, the fourth is the total * number of bytes expected to be uploaded in this transfer, and the * fifth is the number of bytes uploaded so far. * * The callback is only called when the CURLOPT_NOPROGRESS * option is set to FALSE. * * Return a non-zero value to abort the transfer. In which case, the * transfer will set a CURLE_ABORTED_BY_CALLBACK * error. * * Other values: * * * * * Option * Set value to * * * * * CURLOPT_SHARE * * A result of curl_share_init. Makes the cURL * handle to use the data from the shared handle. * * * * * * @throws CurlException * */ function curl_setopt($ch, int $option, $value): void { error_clear_last(); $result = \curl_setopt($ch, $option, $value); if ($result === false) { throw CurlException::createFromCurlResource($ch); } } /** * Return an integer containing the last share curl error number. * * @param resource $sh A cURL share handle returned by curl_share_init. * @return int Returns an integer containing the last share curl error number. * @throws CurlException * */ function curl_share_errno($sh): int { error_clear_last(); $result = \curl_share_errno($sh); if ($result === false) { throw CurlException::createFromPhpError(); } return $result; } /** * Sets an option on the given cURL share handle. * * @param resource $sh A cURL share handle returned by curl_share_init. * @param int $option * * * * Option * Description * * * * * CURLSHOPT_SHARE * * Specifies a type of data that should be shared. * * * * CURLSHOPT_UNSHARE * * Specifies a type of data that will be no longer shared. * * * * * * @param string $value * * * * Value * Description * * * * * CURL_LOCK_DATA_COOKIE * * Shares cookie data. * * * * CURL_LOCK_DATA_DNS * * Shares DNS cache. Note that when you use cURL multi handles, * all handles added to the same multi handle will share DNS cache * by default. * * * * CURL_LOCK_DATA_SSL_SESSION * * Shares SSL session IDs, reducing the time spent on the SSL * handshake when reconnecting to the same server. Note that SSL * session IDs are reused within the same handle by default. * * * * * * @throws CurlException * */ function curl_share_setopt($sh, int $option, string $value): void { error_clear_last(); $result = \curl_share_setopt($sh, $option, $value); if ($result === false) { throw CurlException::createFromPhpError(); } } /** * This function decodes the given URL encoded string. * * @param resource $ch A cURL handle returned by * curl_init. * @param string $str The URL encoded string to be decoded. * @return string Returns decoded string. * @throws CurlException * */ function curl_unescape($ch, string $str): string { error_clear_last(); $result = \curl_unescape($ch, $str); if ($result === false) { throw CurlException::createFromCurlResource($ch); } return $result; }