【发布时间】:2011-04-22 06:27:02
【问题描述】:
我今天正在重构我的 cURL 类,并考虑查看 cURL FLAGS 的默认值。
谁能告诉我在哪里可以找到或如何输出它们?
PS:如果可能的话。
【问题讨论】:
我今天正在重构我的 cURL 类,并考虑查看 cURL FLAGS 的默认值。
谁能告诉我在哪里可以找到或如何输出它们?
PS:如果可能的话。
【问题讨论】:
我今天一直在研究同样的问题,并遇到了这个(相当老的)帖子。由于它几乎出现在 Google 的顶部,所以我认为这是结束我的研究的地方。
简而言之:这是不可能的。
似乎大多数 cURL 选项甚至没有任何默认值。 For example,timeouts。 Or the user agent。但许多其他人确实有默认值,如PHP manual 所述。我找不到任何默认值列表——既不是 PHP 的 cURL 扩展,也不是一般的 cURL。只有在上述 PHP 手册或 cURL API doc 中提到的个别默认值。但是,我怀疑这些页面中是否提到了每一个默认值。
不幸的是,以编程方式找出它们也是不可能的。这个想法是在设置第一个选项值之前找出所有选项值。但是there is no curl_getopt()。甚至在 cURL 本身中也没有。所有模拟curl_getopt() 的解决方案只能检索那些手动设置的选项。
在(非常)简短地浏览一下 cURL 源代码(原始 C 库)后,我还怀疑有时没有真正的默认值,但如果未设置选项,则某些逻辑会确定使用哪个值.在这种情况下,默认值甚至不会被很好地定义。
最后,PHP 的 cURL 扩展可能使用了一些与 cURL 本身不同的默认值。
因此,除非某些 cURL 开发人员对此有所了解——或者至少是有时间和技能真正深入研究代码的人——否则我们几乎无法解决这个问题。
【讨论】:
虽然curl_setopt() 的 PHP 文档列举了可用选项的列表,但它并没有*显示 PHP 为每个连接设置的默认值(默认值,当然直到你覆盖它们)。
您可以在 ext/curl/interface.c 文件中查看 PHP 为 curl 设置的这些默认选项,调用 _php_curl_set_default_options(php_curl *ch)。
目前,默认选项+值是:
// "value" options
CURLOPT_NOPROGRESS => 1
CURLOPT_VERBOSE => 0
CURLOPT_DNS_CACHE_TIMEOUT => 120
CURLOPT_MAXREDIRS => 20
// callback functions
CURLOPT_WRITEFUNCTION => curl_write
CURLOPT_READFUNCTION => curl_read
CURLOPT_HEADERFUNCTION => curl_write_header
// file/stream references
CURLOPT_INFILE => (void *)ch
CURLOPT_FILE => (void *)ch
CURLOPT_WRITEHEADER => (void *)ch
CURLOPT_ERRORBUFFER => ch->err.str
// If ZTS (Zend Thread Safety) *is* enabled
CURLOPT_NOSIGNAL => 1
// If ZTS (Zend Thread Safety) *is not* enabled
CURLOPT_DNS_USE_GLOBAL_CACHE => 1
// OpenSSL CA File (`cainfo` = either in openssl.cafile, curl.cainfo or it doesn't exist)
// note: if the file doesn't exist, this option isn't set
CURLOPT_CAINFO => cainfo
* 注意:php 文档确实提到它为CURLOPT_NOPROGRESS设置了默认值:
PHP 自动将此选项设置为 TRUE,仅应出于调试目的进行更改。
如果您对 curl 的一般默认行为感到好奇,可以查看 curl_easy_setopt() 和 curl_setopt() 的文档中的各个选项。前者对每一个都给出了非常详细的描述,后者是一般性的总结。两者都列出了没有设置选项的 curl 的默认行为。
【讨论】:
CURLOPT_TCP_NODELAY是否像curl一样默认启用
获取您要编辑的CURLOPT 配置选项的代码:
foreach (get_defined_constants() as $key => $val) {
if (strpos($key, 'CURLOPT_') === 0) {
echo $key . ' => ' . $val . "\n";
}
}
以下是我在 CentOS 7 上安装 PHP 5.6.30 时的默认 PHP CURL 设置:
CURLOPT_AUTOREFERER58CURLOPT_BINARYTRANSFER19914CURLOPT_BUFFERSIZE98CURLOPT_CAINFO10065CURLOPT_CAPATH10097CURLOPT_CONNECTTIMEOUT78CURLOPT_COOKIE10022CURLOPT_COOKIEFILE10031CURLOPT_COOKIEJAR10082CURLOPT_COOKIESESSION96CURLOPT_CRLF27CURLOPT_CUSTOMREQUEST10036CURLOPT_DNS_CACHE_TIMEOUT92CURLOPT_DNS_USE_GLOBAL_CACHE91CURLOPT_EGDSOCKET10077CURLOPT_ENCODING10102CURLOPT_FAILONERROR45CURLOPT_FILE10001CURLOPT_FILETIME69CURLOPT_FOLLOWLOCATION52CURLOPT_FORBID_REUSE75CURLOPT_FRESH_CONNECT74CURLOPT_FTPAPPEND50CURLOPT_FTPLISTONLY48CURLOPT_FTPPORT10017CURLOPT_FTP_USE_EPRT106CURLOPT_FTP_USE_EPSV85CURLOPT_HEADER42CURLOPT_HEADERFUNCTION20079CURLOPT_HTTP200ALIASES10104CURLOPT_HTTPGET80CURLOPT_HTTPHEADER10023CURLOPT_HTTPPROXYTUNNEL61CURLOPT_HTTP_VERSION84CURLOPT_INFILE10009CURLOPT_INFILESIZE14CURLOPT_INTERFACE10062CURLOPT_KRB4LEVEL10063CURLOPT_LOW_SPEED_LIMIT19CURLOPT_LOW_SPEED_TIME20CURLOPT_MAXCONNECTS71CURLOPT_MAXREDIRS68CURLOPT_NETRC51CURLOPT_NOBODY44CURLOPT_NOPROGRESS43CURLOPT_NOSIGNAL99CURLOPT_PORT3CURLOPT_POST47CURLOPT_POSTFIELDS10015CURLOPT_POSTQUOTE10039CURLOPT_PREQUOTE10093CURLOPT_PRIVATE10103CURLOPT_PROGRESSFUNCTION20056CURLOPT_PROXY10004CURLOPT_PROXYPORT59CURLOPT_PROXYTYPE101CURLOPT_PROXYUSERPWD10006CURLOPT_PUT54CURLOPT_QUOTE10028CURLOPT_RANDOM_FILE10076CURLOPT_RANGE10007CURLOPT_READDATA10009CURLOPT_READFUNCTION20012CURLOPT_REFERER10016CURLOPT_RESUME_FROM21CURLOPT_RETURNTRANSFER19913CURLOPT_SHARE10100CURLOPT_SSLCERT10025CURLOPT_SSLCERTPASSWD10026CURLOPT_SSLCERTTYPE10086CURLOPT_SSLENGINE10089CURLOPT_SSLENGINE_DEFAULT90CURLOPT_SSLKEY10087CURLOPT_SSLKEYPASSWD10026CURLOPT_SSLKEYTYPE10088CURLOPT_SSLVERSION32CURLOPT_SSL_CIPHER_LIST10083CURLOPT_SSL_VERIFYHOST81CURLOPT_SSL_VERIFYPEER64CURLOPT_STDERR10037CURLOPT_TELNETOPTIONS10070CURLOPT_TIMECONDITION33CURLOPT_TIMEOUT13CURLOPT_TIMEVALUE34CURLOPT_TRANSFERTEXT53CURLOPT_UNRESTRICTED_AUTH105CURLOPT_UPLOAD46CURLOPT_URL10002CURLOPT_USERAGENT10018CURLOPT_USERPWD10005CURLOPT_VERBOSE41CURLOPT_WRITEFUNCTION20011CURLOPT_WRITEHEADER10029CURLOPT_HTTPAUTH107CURLOPT_FTP_CREATE_MISSING_DIRS110CURLOPT_PROXYAUTH111CURLOPT_FTP_RESPONSE_TIMEOUT112CURLOPT_IPRESOLVE113CURLOPT_MAXFILESIZE114CURLOPT_FTP_SSL119CURLOPT_NETRC_FILE10118CURLOPT_FTPSSLAUTH129CURLOPT_FTP_ACCOUNT10134CURLOPT_TCP_NODELAY121CURLOPT_COOKIELIST10135CURLOPT_IGNORE_CONTENT_LENGTH136CURLOPT_FTP_SKIP_PASV_IP137CURLOPT_FTP_FILEMETHOD138CURLOPT_CONNECT_ONLY141CURLOPT_LOCALPORT139CURLOPT_LOCALPORTRANGE140CURLOPT_FTP_ALTERNATIVE_TO_USER10147CURLOPT_MAX_RECV_SPEED_LARGE30146CURLOPT_MAX_SEND_SPEED_LARGE30145CURLOPT_SSL_SESSIONID_CACHE150CURLOPT_FTP_SSL_CCC154CURLOPT_SSH_AUTH_TYPES151CURLOPT_SSH_PRIVATE_KEYFILE10153CURLOPT_SSH_PUBLIC_KEYFILE10152CURLOPT_CONNECTTIMEOUT_MS156CURLOPT_HTTP_CONTENT_DECODING158CURLOPT_HTTP_TRANSFER_DECODING157CURLOPT_TIMEOUT_MS155CURLOPT_KRBLEVEL10063CURLOPT_NEW_DIRECTORY_PERMS160CURLOPT_NEW_FILE_PERMS159CURLOPT_APPEND50CURLOPT_DIRLISTONLY48CURLOPT_USE_SSL119CURLOPT_SSH_HOST_PUBLIC_KEY_MD510162CURLOPT_PROXY_TRANSFER_MODE166CURLOPT_ADDRESS_SCOPE171CURLOPT_CRLFILE10169CURLOPT_ISSUERCERT10170CURLOPT_KEYPASSWD10026CURLOPT_CERTINFO172CURLOPT_PASSWORD10174CURLOPT_POSTREDIR161CURLOPT_PROXYPASSWORD10176CURLOPT_PROXYUSERNAME10175CURLOPT_USERNAME10173CURLOPT_NOPROXY10177CURLOPT_PROTOCOLS181CURLOPT_REDIR_PROTOCOLS182CURLOPT_SOCKS5_GSSAPI_NEC180CURLOPT_SOCKS5_GSSAPI_SERVICE10179CURLOPT_TFTP_BLKSIZE178CURLOPT_SSH_KNOWNHOSTS10183CURLOPT_FTP_USE_PRET188CURLOPT_MAIL_FROM10186CURLOPT_MAIL_RCPT10187CURLOPT_RTSP_CLIENT_CSEQ193CURLOPT_RTSP_REQUEST189CURLOPT_RTSP_SERVER_CSEQ194CURLOPT_RTSP_SESSION_ID10190CURLOPT_RTSP_STREAM_URI10191CURLOPT_RTSP_TRANSPORT10192CURLOPT_FNMATCH_FUNCTION20200CURLOPT_WILDCARDMATCH197CURLOPT_RESOLVE10203CURLOPT_TLSAUTH_PASSWORD10205CURLOPT_TLSAUTH_TYPE10206CURLOPT_TLSAUTH_USERNAME10204CURLOPT_ACCEPT_ENCODING10102CURLOPT_TRANSFER_ENCODING207CURLOPT_GSSAPI_DELEGATION210CURLOPT_ACCEPTTIMEOUT_MS212CURLOPT_DNS_SERVERS10211CURLOPT_MAIL_AUTH10217CURLOPT_SSL_OPTIONS216CURLOPT_TCP_KEEPALIVE213CURLOPT_TCP_KEEPIDLE214CURLOPT_TCP_KEEPINTVL215CURLOPT_SAFE_UPLOAD -1【讨论】:
这将显示“CURL*”常量名称及其值:
foreach (get_defined_constants() as $name => $val) {
if (strpos($name, 'CURL') === 0) {
echo $name . ' => ' . $val . "\n";
}
}
当然,对于 curl 选项值,将“CURL”更改为“CURLOPT_”。
(如果您想在脚本中使用整数值而不是常量名,则不应该这样做。)
【讨论】:
CURLOPT_HEADER => 42?值不应该是 1 或 0(真/假)吗?