Значения параметра cURL по умолчанию

Сегодня я рефакторил свой класс cURL и подумал о том, чтобы посмотреть на значения по умолчанию cURL FLAGS.
Может ли кто-нибудь сказать мне, где я могу найти или как я могу их вывести?

PS: Если это вообще возможно.


person Eugene    schedule 07.10.2010    source источник


Ответы (4)


Сегодня я исследовал ту же проблему и наткнулся на этот (довольно старый) пост. Поскольку он находится в верхней части Google, я подумал, что это место для завершения моего исследования.

Короче: это невозможно.

Похоже, что большинство параметров cURL даже не имеют значений по умолчанию. Например, тайм-ауты. Или пользовательский агент. Но многие другие имеют значения по умолчанию, как указано в руководстве по PHP. Я не смог найти никакого списка значений по умолчанию — ни для расширения PHP cURL, ни для cURL вообще. Только отдельные значения по умолчанию, упомянутые в указанном руководстве по PHP или в документе по cURL API. Однако я сомневаюсь, что на этих страницах упоминается каждое значение по умолчанию.

К сожалению, узнать их программно также невозможно. Идея заключалась бы в том, чтобы узнать значения всех параметров перед установкой первого. Но нет curl_getopt(). Даже в самом cURL. Все решения, эмулирующие curl_getopt(), могут извлекать только те параметры, которые были установлены вручную.

После (очень) краткого взгляда на исходный код cURL (исходная библиотека C) я также подозреваю, что иногда нет реальных значений по умолчанию, но если параметр не установлен, некоторая логика помогает выяснить, какое значение использовать. В этом случае значения по умолчанию даже не будут четко определены.

Наконец, есть вероятность, что расширение PHP cURL использует некоторые значения по умолчанию, отличные от самого cURL.

Так что, если какой-нибудь разработчик cURL не прольет свет на это — или, по крайней мере, кто-то, у кого есть время и навыки, чтобы действительно погрузиться в код — мы в значительной степени застряли на этом.

person Martin Ender    schedule 21.09.2012

Хотя документация по PHP для curl_setopt() перечисляет список доступных опций, она не* показывает значения по умолчанию, которые устанавливает PHP для каждого подключения (по умолчанию, пока вы их не перезапишете, конечно).

Вы можете просмотреть эти параметры PHP по умолчанию для curl в ext/curl/interface.c в вызове _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 по умолчанию без установленных опций.

person newfurniturey    schedule 16.03.2017
comment
Интересно, включен ли CURLOPT_TCP_NODELAY по умолчанию, как в curl - person mente; 13.07.2017

Это отобразит имена констант «CURL*» и их значения:

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

Конечно, только для значений параметров завитка измените «CURL» на «CURLOPT_».

(Если вы думаете об использовании целочисленных значений вместо имен констант в вашем скрипте, вам не следует этого делать.)

person GZipp    schedule 07.10.2010
comment
+1 за код. также, для ссылки на флаги параметров curl, проверьте это - curl.haxx.se/libcurl/c /curl_easy_setopt.html - person bhu1st; 07.10.2010
comment
@bhu1st - +1 за ваш комментарий. Однако следует иметь в виду, что не все описанные здесь параметры присутствуют в реализации PHP. - person GZipp; 07.10.2010
comment
В порядке. Теперь это немного странно. Как это возможно CURLOPT_HEADER => 42? Разве значение не должно быть 1 или 0 (истина/ложь)? - person Eugene; 07.10.2010
comment
@Eugene - значения CURLOPT_* используются в побитовых операциях, а не как значения true/false. True и false используются только в параметрах вспомогательных функций curl_setopt() и curl_setopt_array(). - person GZipp; 07.10.2010
comment
@ Юджин - теперь я понимаю, что на самом деле не ответил на твой вопрос. Мой код не говорит вам, включена или выключена данная опция, а только значение константы. Вернемся к пресловутой чертежной доске. - person GZipp; 07.10.2010
comment
Да, я думал, что вы на правильном пути, но нет, эти постоянные значения являются своего рода внутренним идентификатором для этого конкретного параметра, а не фактическим значением параметра по умолчанию. Я думаю, что ответ @m.buettner действительно правильный. - person Simon East; 09.12.2013

Код для получения параметров конфигурации CURLOPT, которые вы хотите отредактировать:

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

Ниже приведены настройки PHP CURL по умолчанию для моей установки PHP 5.6.30 в CentOS 7:

  • CURLOPT_AUTOREFERER 58
  • CURLOPT_BINARYTRANSFER 19914
  • CURLOPT_BUFFERSIZE 98
  • CURLOPT_CAINFO 10065
  • CURLOPT_CAPATH 10097
  • CURLOPT_CONNECTTIMEOUT 78
  • CURLOPT_COOKIE 10022
  • CURLOPT_COOKIEFILE 10031
  • CURLOPT_COOKIEJAR 10082
  • CURLOPT_COOKIESESSION 96
  • CURLOPT_CRLF 27
  • CURLOPT_CUSTOMREQUEST 10036
  • CURLOPT_DNS_CACHE_TIMEOUT 92
  • CURLOPT_DNS_USE_GLOBAL_CACHE 91
  • CURLOPT_EGDSOCKET 10077
  • CURLOPT_ENCODING 10102
  • CURLOPT_FAILONERROR 45
  • CURLOPT_FILE 10001
  • CURLOPT_FILETIME 69
  • CURLOPT_FOLLOWLOCATION 52
  • CURLOPT_FORBID_REUSE 75
  • CURLOPT_FRESH_CONNECT 74
  • CURLOPT_FTPAPPEND 50
  • CURLOPT_FTPLISTONLY 48
  • CURLOPT_FTPPORT 10017
  • CURLOPT_FTP_USE_EPRT 106
  • CURLOPT_FTP_USE_EPSV 85
  • CURLOPT_HEADER 42
  • CURLOPT_HEADERFUNCTION 20079
  • CURLOPT_HTTP200ALIASES 10104
  • CURLOPT_HTTPGET 80
  • CURLOPT_HTTPHEADER 10023
  • CURLOPT_HTTPPROXYTUNNEL 61
  • CURLOPT_HTTP_VERSION 84
  • CURLOPT_INFILE 10009
  • CURLOPT_INFILESIZE 14
  • CURLOPT_INTERFACE 10062
  • CURLOPT_KRB4LEVEL 10063
  • CURLOPT_LOW_SPEED_LIMIT 19
  • CURLOPT_LOW_SPEED_TIME 20
  • CURLOPT_MAXCONNECTS 71
  • CURLOPT_MAXREDIRS 68
  • CURLOPT_NETRC 51
  • CURLOPT_NOBODY 44
  • CURLOPT_NOPROGRESS 43
  • CURLOPT_NOSIGNAL 99
  • CURLOPT_PORT 3
  • CURLOPT_POST 47
  • CURLOPT_POSTFIELDS 10015
  • CURLOPT_POSTQUOTE 10039
  • CURLOPT_PREQUOTE 10093
  • CURLOPT_PRIVATE 10103
  • CURLOPT_PROGRESSFUNCTION 20056
  • CURLOPT_PROXY 10004
  • CURLOPT_PROXYPORT 59
  • CURLOPT_PROXYTYPE 101
  • CURLOPT_PROXYUSERPWD 10006
  • CURLOPT_PUT 54
  • CURLOPT_QUOTE 10028
  • CURLOPT_RANDOM_FILE 10076
  • CURLOPT_RANGE 10007
  • CURLOPT_READDATA 10009
  • CURLOPT_READFUNCTION 20012
  • CURLOPT_REFERER 10016
  • CURLOPT_RESUME_FROM 21
  • CURLOPT_RETURNTRANSFER 19913
  • CURLOPT_SHARE 10100
  • CURLOPT_SSLCERT 10025
  • CURLOPT_SSLCERTPASSWD 10026
  • CURLOPT_SSLCERTTYPE 10086
  • CURLOPT_SSLENGINE 10089
  • CURLOPT_SSLENGINE_DEFAULT 90
  • CURLOPT_SSLKEY 10087
  • CURLOPT_SSLKEYPASSWD 10026
  • CURLOPT_SSLKEYTYPE 10088
  • CURLOPT_SSLVERSION 32
  • CURLOPT_SSL_CIPHER_LIST 10083
  • CURLOPT_SSL_VERIFYHOST 81
  • CURLOPT_SSL_VERIFYPEER 64
  • CURLOPT_STDERR 10037
  • CURLOPT_TELNETOPTIONS 10070
  • CURLOPT_TIMECONDITION 33
  • CURLOPT_TIMEOUT 13
  • CURLOPT_TIMEVALUE 34
  • CURLOPT_TRANSFERTEXT 53
  • CURLOPT_UNRESTRICTED_AUTH 105
  • CURLOPT_UPLOAD 46
  • CURLOPT_URL 10002
  • CURLOPT_USERAGENT 10018
  • CURLOPT_USERPWD 10005
  • CURLOPT_VERBOSE 41
  • CURLOPT_WRITEFUNCTION 20011
  • CURLOPT_WRITEHEADER 10029
  • CURLOPT_HTTPAUTH 107
  • CURLOPT_FTP_CREATE_MISSING_DIRS 110
  • CURLOPT_PROXYAUTH 111
  • CURLOPT_FTP_RESPONSE_TIMEOUT 112
  • CURLOPT_IPRESOLVE 113
  • CURLOPT_MAXFILESIZE 114
  • CURLOPT_FTP_SSL 119
  • CURLOPT_NETRC_FILE 10118
  • CURLOPT_FTPSSLAUTH 129
  • CURLOPT_FTP_ACCOUNT 10134
  • CURLOPT_TCP_NODELAY 121
  • CURLOPT_COOKIELIST 10135
  • CURLOPT_IGNORE_CONTENT_LENGTH 136
  • CURLOPT_FTP_SKIP_PASV_IP 137
  • CURLOPT_FTP_FILEMETHOD 138
  • CURLOPT_CONNECT_ONLY 141
  • CURLOPT_LOCALPORT 139
  • CURLOPT_LOCALPORTRANGE 140
  • CURLOPT_FTP_ALTERNATIVE_TO_USER 10147
  • CURLOPT_MAX_RECV_SPEED_LARGE 30146
  • CURLOPT_MAX_SEND_SPEED_LARGE 30145
  • CURLOPT_SSL_SESSIONID_CACHE 150
  • CURLOPT_FTP_SSL_CCC 154
  • CURLOPT_SSH_AUTH_TYPES 151
  • CURLOPT_SSH_PRIVATE_KEYFILE 10153
  • CURLOPT_SSH_PUBLIC_KEYFILE 10152
  • CURLOPT_CONNECTTIMEOUT_MS 156
  • CURLOPT_HTTP_CONTENT_DECODING 158
  • CURLOPT_HTTP_TRANSFER_DECODING 157
  • CURLOPT_TIMEOUT_MS 155
  • CURLOPT_KRBLEVEL 10063
  • CURLOPT_NEW_DIRECTORY_PERMS 160
  • CURLOPT_NEW_FILE_PERMS 159
  • CURLOPT_APPEND 50
  • CURLOPT_DIRLISTONLY 48
  • CURLOPT_USE_SSL 119
  • CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 10162
  • CURLOPT_PROXY_TRANSFER_MODE 166
  • CURLOPT_ADDRESS_SCOPE 171
  • CURLOPT_CRLFILE 10169
  • CURLOPT_ISSUERCERT 10170
  • CURLOPT_KEYPASSWD 10026
  • CURLOPT_CERTINFO 172
  • CURLOPT_PASSWORD 10174
  • CURLOPT_POSTREDIR 161
  • CURLOPT_PROXYPASSWORD 10176
  • CURLOPT_PROXYUSERNAME 10175
  • CURLOPT_USERNAME 10173
  • CURLOPT_NOPROXY 10177
  • CURLOPT_PROTOCOLS 181
  • CURLOPT_REDIR_PROTOCOLS 182
  • CURLOPT_SOCKS5_GSSAPI_NEC 180
  • CURLOPT_SOCKS5_GSSAPI_SERVICE 10179
  • CURLOPT_TFTP_BLKSIZE 178
  • CURLOPT_SSH_KNOWNHOSTS 10183
  • CURLOPT_FTP_USE_PRET 188
  • CURLOPT_MAIL_FROM 10186
  • CURLOPT_MAIL_RCPT 10187
  • CURLOPT_RTSP_CLIENT_CSEQ 193
  • CURLOPT_RTSP_REQUEST 189
  • CURLOPT_RTSP_SERVER_CSEQ 194
  • CURLOPT_RTSP_SESSION_ID 10190
  • CURLOPT_RTSP_STREAM_URI 10191
  • CURLOPT_RTSP_TRANSPORT 10192
  • CURLOPT_FNMATCH_FUNCTION 20200
  • CURLOPT_WILDCARDMATCH 197
  • CURLOPT_RESOLVE 10203
  • CURLOPT_TLSAUTH_PASSWORD 10205
  • CURLOPT_TLSAUTH_TYPE 10206
  • CURLOPT_TLSAUTH_USERNAME 10204
  • CURLOPT_ACCEPT_ENCODING 10102
  • CURLOPT_TRANSFER_ENCODING 207
  • CURLOPT_GSSAPI_DELEGATION 210
  • CURLOPT_ACCEPTTIMEOUT_MS 212
  • CURLOPT_DNS_SERVERS 10211
  • CURLOPT_MAIL_AUTH 10217
  • CURLOPT_SSL_OPTIONS 216
  • CURLOPT_TCP_KEEPALIVE 213
  • CURLOPT_TCP_KEEPIDLE 214
  • CURLOPT_TCP_KEEPINTVL 215
  • CURLOPT_SAFE_UPLOAD -1
person William Entriken    schedule 08.02.2017
comment
Я не думаю, что это фактические значения параметров. Каждая из этих опций является константой, которая внутренне представлена ​​как целое число. Глядя на перечисленные вами значения, я думаю, что это просто внутренние целые числа. - person Martin Ender; 08.02.2017
comment
На самом деле, это то же самое, что и другой ответ (где автор заявляет в комментарии, что он не отвечает на вопрос). - person Martin Ender; 08.02.2017