【问题标题】:Default cURL option values默认 cURL 选项值
【发布时间】:2011-04-22 06:27:02
【问题描述】:

我今天正在重构我的 cURL 类,并考虑查看 cURL FLAGS 的默认值。
谁能告诉我在哪里可以找到或如何输出它们?

PS:如果可能的话。

【问题讨论】:

    标签: php curl default


    【解决方案1】:

    我今天一直在研究同样的问题,并遇到了这个(相当老的)帖子。由于它几乎出现在 Google 的顶部,所以我认为这是结束我的研究的地方。

    简而言之:这是不可能的。

    似乎大多数 cURL 选项甚至没有任何默认值。 For exampletimeoutsOr 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 开发人员对此有所了解——或者至少是有时间和技能真正深入研究代码的人——否则我们几乎无法解决这个问题。

    【讨论】:

      【解决方案2】:

      虽然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一样默认启用
      【解决方案3】:

      获取您要编辑的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_AUTOREFERER58
      • CURLOPT_BINARYTRANSFER19914
      • CURLOPT_BUFFERSIZE98
      • CURLOPT_CAINFO10065
      • CURLOPT_CAPATH10097
      • CURLOPT_CONNECTTIMEOUT78
      • CURLOPT_COOKIE10022
      • CURLOPT_COOKIEFILE10031
      • CURLOPT_COOKIEJAR10082
      • CURLOPT_COOKIESESSION96
      • CURLOPT_CRLF27
      • CURLOPT_CUSTOMREQUEST10036
      • CURLOPT_DNS_CACHE_TIMEOUT92
      • CURLOPT_DNS_USE_GLOBAL_CACHE91
      • CURLOPT_EGDSOCKET10077
      • CURLOPT_ENCODING10102
      • CURLOPT_FAILONERROR45
      • CURLOPT_FILE10001
      • CURLOPT_FILETIME69
      • CURLOPT_FOLLOWLOCATION52
      • CURLOPT_FORBID_REUSE75
      • CURLOPT_FRESH_CONNECT74
      • CURLOPT_FTPAPPEND50
      • CURLOPT_FTPLISTONLY48
      • CURLOPT_FTPPORT10017
      • CURLOPT_FTP_USE_EPRT106
      • CURLOPT_FTP_USE_EPSV85
      • CURLOPT_HEADER42
      • CURLOPT_HEADERFUNCTION20079
      • CURLOPT_HTTP200ALIASES10104
      • CURLOPT_HTTPGET80
      • CURLOPT_HTTPHEADER10023
      • CURLOPT_HTTPPROXYTUNNEL61
      • CURLOPT_HTTP_VERSION84
      • CURLOPT_INFILE10009
      • CURLOPT_INFILESIZE14
      • CURLOPT_INTERFACE10062
      • CURLOPT_KRB4LEVEL10063
      • CURLOPT_LOW_SPEED_LIMIT19
      • CURLOPT_LOW_SPEED_TIME20
      • CURLOPT_MAXCONNECTS71
      • CURLOPT_MAXREDIRS68
      • CURLOPT_NETRC51
      • CURLOPT_NOBODY44
      • CURLOPT_NOPROGRESS43
      • CURLOPT_NOSIGNAL99
      • CURLOPT_PORT3
      • CURLOPT_POST47
      • CURLOPT_POSTFIELDS10015
      • CURLOPT_POSTQUOTE10039
      • CURLOPT_PREQUOTE10093
      • CURLOPT_PRIVATE10103
      • CURLOPT_PROGRESSFUNCTION20056
      • CURLOPT_PROXY10004
      • CURLOPT_PROXYPORT59
      • CURLOPT_PROXYTYPE101
      • CURLOPT_PROXYUSERPWD10006
      • CURLOPT_PUT54
      • CURLOPT_QUOTE10028
      • CURLOPT_RANDOM_FILE10076
      • CURLOPT_RANGE10007
      • CURLOPT_READDATA10009
      • CURLOPT_READFUNCTION20012
      • CURLOPT_REFERER10016
      • CURLOPT_RESUME_FROM21
      • CURLOPT_RETURNTRANSFER19913
      • CURLOPT_SHARE10100
      • CURLOPT_SSLCERT10025
      • CURLOPT_SSLCERTPASSWD10026
      • CURLOPT_SSLCERTTYPE10086
      • CURLOPT_SSLENGINE10089
      • CURLOPT_SSLENGINE_DEFAULT90
      • CURLOPT_SSLKEY10087
      • CURLOPT_SSLKEYPASSWD10026
      • CURLOPT_SSLKEYTYPE10088
      • CURLOPT_SSLVERSION32
      • CURLOPT_SSL_CIPHER_LIST10083
      • CURLOPT_SSL_VERIFYHOST81
      • CURLOPT_SSL_VERIFYPEER64
      • CURLOPT_STDERR10037
      • CURLOPT_TELNETOPTIONS10070
      • CURLOPT_TIMECONDITION33
      • CURLOPT_TIMEOUT13
      • CURLOPT_TIMEVALUE34
      • CURLOPT_TRANSFERTEXT53
      • CURLOPT_UNRESTRICTED_AUTH105
      • CURLOPT_UPLOAD46
      • CURLOPT_URL10002
      • CURLOPT_USERAGENT10018
      • CURLOPT_USERPWD10005
      • CURLOPT_VERBOSE41
      • CURLOPT_WRITEFUNCTION20011
      • CURLOPT_WRITEHEADER10029
      • CURLOPT_HTTPAUTH107
      • CURLOPT_FTP_CREATE_MISSING_DIRS110
      • CURLOPT_PROXYAUTH111
      • CURLOPT_FTP_RESPONSE_TIMEOUT112
      • CURLOPT_IPRESOLVE113
      • CURLOPT_MAXFILESIZE114
      • CURLOPT_FTP_SSL119
      • CURLOPT_NETRC_FILE10118
      • CURLOPT_FTPSSLAUTH129
      • CURLOPT_FTP_ACCOUNT10134
      • CURLOPT_TCP_NODELAY121
      • CURLOPT_COOKIELIST10135
      • CURLOPT_IGNORE_CONTENT_LENGTH136
      • CURLOPT_FTP_SKIP_PASV_IP137
      • CURLOPT_FTP_FILEMETHOD138
      • CURLOPT_CONNECT_ONLY141
      • CURLOPT_LOCALPORT139
      • CURLOPT_LOCALPORTRANGE140
      • CURLOPT_FTP_ALTERNATIVE_TO_USER10147
      • CURLOPT_MAX_RECV_SPEED_LARGE30146
      • CURLOPT_MAX_SEND_SPEED_LARGE30145
      • CURLOPT_SSL_SESSIONID_CACHE150
      • CURLOPT_FTP_SSL_CCC154
      • CURLOPT_SSH_AUTH_TYPES151
      • CURLOPT_SSH_PRIVATE_KEYFILE10153
      • CURLOPT_SSH_PUBLIC_KEYFILE10152
      • CURLOPT_CONNECTTIMEOUT_MS156
      • CURLOPT_HTTP_CONTENT_DECODING158
      • CURLOPT_HTTP_TRANSFER_DECODING157
      • CURLOPT_TIMEOUT_MS155
      • CURLOPT_KRBLEVEL10063
      • CURLOPT_NEW_DIRECTORY_PERMS160
      • CURLOPT_NEW_FILE_PERMS159
      • CURLOPT_APPEND50
      • CURLOPT_DIRLISTONLY48
      • CURLOPT_USE_SSL119
      • CURLOPT_SSH_HOST_PUBLIC_KEY_MD510162
      • CURLOPT_PROXY_TRANSFER_MODE166
      • CURLOPT_ADDRESS_SCOPE171
      • CURLOPT_CRLFILE10169
      • CURLOPT_ISSUERCERT10170
      • CURLOPT_KEYPASSWD10026
      • CURLOPT_CERTINFO172
      • CURLOPT_PASSWORD10174
      • CURLOPT_POSTREDIR161
      • CURLOPT_PROXYPASSWORD10176
      • CURLOPT_PROXYUSERNAME10175
      • CURLOPT_USERNAME10173
      • CURLOPT_NOPROXY10177
      • CURLOPT_PROTOCOLS181
      • CURLOPT_REDIR_PROTOCOLS182
      • CURLOPT_SOCKS5_GSSAPI_NEC180
      • CURLOPT_SOCKS5_GSSAPI_SERVICE10179
      • CURLOPT_TFTP_BLKSIZE178
      • CURLOPT_SSH_KNOWNHOSTS10183
      • CURLOPT_FTP_USE_PRET188
      • CURLOPT_MAIL_FROM10186
      • CURLOPT_MAIL_RCPT10187
      • CURLOPT_RTSP_CLIENT_CSEQ193
      • CURLOPT_RTSP_REQUEST189
      • CURLOPT_RTSP_SERVER_CSEQ194
      • CURLOPT_RTSP_SESSION_ID10190
      • CURLOPT_RTSP_STREAM_URI10191
      • CURLOPT_RTSP_TRANSPORT10192
      • CURLOPT_FNMATCH_FUNCTION20200
      • CURLOPT_WILDCARDMATCH197
      • CURLOPT_RESOLVE10203
      • CURLOPT_TLSAUTH_PASSWORD10205
      • CURLOPT_TLSAUTH_TYPE10206
      • CURLOPT_TLSAUTH_USERNAME10204
      • CURLOPT_ACCEPT_ENCODING10102
      • CURLOPT_TRANSFER_ENCODING207
      • CURLOPT_GSSAPI_DELEGATION210
      • CURLOPT_ACCEPTTIMEOUT_MS212
      • CURLOPT_DNS_SERVERS10211
      • CURLOPT_MAIL_AUTH10217
      • CURLOPT_SSL_OPTIONS216
      • CURLOPT_TCP_KEEPALIVE213
      • CURLOPT_TCP_KEEPIDLE214
      • CURLOPT_TCP_KEEPINTVL215
      • CURLOPT_SAFE_UPLOAD -1

      【讨论】:

      • 我不认为这些是实际的选项值。这些选项中的每一个都是一个常量,在内部表示为一个整数。查看您列出的值,我认为这些只是那些内部整数。
      • 实际上,这与其他答案完全相同(作者在评论中声明它没有回答问题)。
      【解决方案4】:

      这将显示“CURL*”常量名称及其值:

      foreach (get_defined_constants() as $name => $val) {
          if (strpos($name, 'CURL') === 0) {
              echo $name . ' => ' . $val . "\n";
          }
      }
      

      当然,对于 curl 选项值,将“CURL”更改为“CURLOPT_”。

      (如果您想在脚本中使用整数值而不是常量名,则不应该这样做。)

      【讨论】:

      • +1 代码。另外,为了参考 curl 选项标志,请检查这个 - curl.haxx.se/libcurl/c/curl_easy_setopt.html
      • @bhu1st - +1 供您发表评论。但应记住,并非所有描述的选项都包含在 PHP 实现中。
      • 好的。现在这有点奇怪。怎么可能CURLOPT_HEADER => 42?值不应该是 1 或 0(真/假)吗?
      • @Eugene - 我现在意识到我还没有真正回答你的问题。我的代码不会告诉您给定选项是打开还是关闭,只告诉您常量的值是什么。回到众所周知的绘​​图板上。
      • 是的,我认为您的方法是正确的,但是不,这些常量值是特定设置的内部 ID,而不是设置的实际默认值。我认为@m.buettner 的回答实际上是正确的。
      猜你喜欢
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多