默认 cURL 选项值

2022-08-30 23:26:12

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

附言:如果可能的话。


答案 1

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

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

似乎大多数cURL选项甚至没有任何默认值。例如超时或用户代理。但许多其他人确实有默认值,正如PHP手册所述。我找不到任何默认值列表 - 无论是PHP的cURL扩展名,还是一般的cURL。仅上述 PHP 手册或 cURL API 文档中提到的单个默认值。但是,我怀疑这些页面中是否提到了每个默认值。

不幸的是,以编程方式找到它们也是不可能的。我们的想法是在设置第一个选项值之前找出所有选项值。但是没有curl_getopt()。甚至在cURL本身中也是如此。所有模拟的解决方案只能检索那些已手动设置的选项。curl_getopt()

在(非常)短暂地浏览了cURL源代码(原始的C lib)之后,我也怀疑有时没有真正的默认值,但是如果没有设置一个选项,就会有一些逻辑来弄清楚要使用哪个值。在这种情况下,默认值甚至不会被很好地定义。

最后,PHP的cURL扩展很可能采用了与cURL本身不同的默认值。

因此,除非一些cURL开发人员对此进行了一些阐明 - 或者至少有人有时间和技能真正深入研究代码 - 否则我们几乎陷入了困境。


答案 2

虽然curl_setopt() 的 PHP 文档枚举了可用选项的列表,但它不会* 显示 PHP 为每个连接设置的默认值(当然,直到您覆盖它们为止)。

您可以在 ext/curl/interface.c 文件中查看这些默认 curl 选项 PHP 集,在对 ._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 的默认行为,但未设置选项。


推荐