curl_setopt()
1. 定义
该函数给cURL会话设置传输选项。成功时返回TRUE,失败则返回FALSE。
2. 语法
curl_setopt ( resource $ch , int $option , mixed $value ) : bool
3. 参数说明
| 参数 | 可选性 | 数据类型 | 描述 |
|---|---|---|---|
| $ch | 必需 | 资源类型 | 通过函数curl_init()打开的curl资源句柄 |
| $option | 必需 | 整型 | 被设置的CURLOPT_XXX选项 |
| $value | 必需 | mixed | 被设置的CURLOPT_XXX选项的值 |
其中,$option有以下几种值可选:
CURLOPT_AUTOREFERER:布尔值- 是否自动设置
header中的Referer信息,设置为TRUE时,会根据Location重定向来自动设置
- 是否自动设置
CURLOPT_COOKIESESSION:布尔值- 设为
TRUE时将开启新的一次cookie会话。它将强制libcurl忽略之前会话时存的其他cookie libcurl在默认状况下无论是否为会话,都会储存、加载所有cookie- 会话
cookie是指没有过期时间,只存活在会话之中
- 设为
CURLOPT_CERTINFO:布尔值- 是否在安全传输时输出
SSL证书信息到STDERR
- 是否在安全传输时输出
CURLOPT_CONNECT_ONLY:布尔值- 该值为
TRUE时将让库执行所有需要的代理、验证、连接过程,但不传输数据 - 此选项用于 HTTP、SMTP 和 POP3
- 该值为
CURLOPT_CRLF:布尔值- 该值为
TRUE时将Unix的换行符转换成回车换行符
- 该值为
CURLOPT_DNS_USE_GLOBAL_CACHE:布尔值- 该值为
TRUE时将启用一个全局的DNS缓存。此选项非线程安全的,默认已开启
- 该值为
CURLOPT_FAILONERROR:布尔值- 当
HTTP状态码大于等于 400,该值为TRUE时将显示错误详情 - 默认情况下将返回页面,忽略
HTTP代码
- 当
CURLOPT_SSL_FALSESTART:布尔值- 该值为
TRUE时将开启TLSFalseStart(一种TLS握手优化方式)
- 该值为
CURLOPT_FILETIME:布尔值- 该值为
TRUE时,会尝试获取远程文档中的修改时间信息 - 该信息可通过
curl_getinfo()函数的CURLINFO_FILETIME选项获取
- 该值为
CURLOPT_FOLLOWLOCATION:布尔值- 该值为
TRUE时将会根据服务器返回HTTP头中的Location:重定向 Location:发送几次就重定向几次,除非设置了CURLOPT_MAXREDIRS来限制最大重定向次数
- 该值为
CURLOPT_FORBID_REUSE:布尔值- 该值为
TRUE时将在完成交互以后强制明确的断开连接,不能在连接池中重用
- 该值为
CURLOPT_FRESH_CONNECT:布尔值- 该值为
TRUE时将强制获取一个新的连接,而不是缓存中的连接
- 该值为
CURLOPT_FTP_USE_EPRT:布尔值- 该值为
TRUE时,当FTP下载时,使用EPRT(和LPRT)命令 - 该值为
FALSE时,禁用EPRT和LPRT,仅仅使用PORT命令
- 该值为
CURLOPT_FTP_USE_EPSV:布尔值- 该值为
TRUE时,在FTP传输过程中,回到PASV模式前,先尝试EPSV命令 - 该值为
FALSE时,禁用 EPSV
- 该值为
CURLOPT_FTP_CREATE_MISSING_DIRS:布尔值- 该值为
TRUE时,当FTP操作不存在的目录时将创建它
- 该值为
CURLOPT_FTPAPPEND:布尔值- 该值为
TRUE时,写入文件时追加,而不是覆盖
- 该值为
CURLOPT_TCP_NODELAY:布尔值- 该值为
TRUE时,禁用TCP的Nagle算法,减少网络上的小包数量
- 该值为
CURLOPT_FTPASCII:布尔值。CURLOPT_TRANSFERTEXT的别名CURLOPT_FTPLISTONLY:布尔值- 该值为
TRUE时只列出FTP目录的名字
- 该值为
CURLOPT_HEADER:布尔值- 该值为
TRUE时,将头文件的信息作为数据流输出
- 该值为
CURLINFO_HEADER_OUT:布尔值- 该值为
TRUE时,追踪句柄的请求字符串
- 该值为
CURLOPT_HTTPGET:布尔值- 该值为
TRUE时,设置HTTP的method为GET - 由于默认是
GET,所以只有method被修改时才需要这个选项
- 该值为
CURLOPT_HTTPPROXYTUNNEL:布尔值- 该值为
TRUE时,通过指定的HTTP代理来传输
- 该值为
CURLOPT_NETRC:布尔值- 该值为
TRUE时,在连接建立时,访问~/.netrc文件获取用户名和密码来连接远程站点
- 该值为
CURLOPT_NOBODY:布尔值- 该值为
TRUE时将不输出BODY部分 - 同时
Mehtod变成了 HEAD,修改为FALSE时不会变成 GET
- 该值为
CURLOPT_NOPROGRESS:- 该值为
TRUE时,关闭cURL的传输进度。默认为TRUE
- 该值为
CURLOPT_NOSIGNAL:布尔值- 该值为
TRUE时忽略所有的cURL传递给PHP进行的信号 - 在
SAPI多线程传输时此项被默认启用,所以超时选项仍能使用
- 该值为
CURLOPT_PATH_AS_IS:布尔值- 该值为
TRUE时不处理 dot dot sequences (即 ../ )
- 该值为
CURLOPT_PIPEWAIT:布尔值- 该值为
TRUE时等待 pipelining/multiplexing
- 该值为
CURLOPT_POST:布尔值- 该值为
TRUE时发送POST请求,类型为:application/x-www-form-urlencoded,是HTML表单提交时最常见的一种
- 该值为
CURLOPT_PUT:布尔值- 该值为
TRUE时允许HTTP发送文件。要被PUT的文件必须在 CURLOPT_INFILE和CURLOPT_INFILESIZE 中设置
- 该值为
CURLOPT_RETURNTRANSFER:布尔值- 该值为
TRUE时将curl_exec()获取的信息以字符串返回,而不是直接输出
- 该值为
CURLOPT_SASL_IR:布尔值- 该值为
TRUE时开启,收到首包(first packet)后发送初始的响应(initial response)
- 该值为
CURLOPT_SSL_ENABLE_ALPN:布尔值- 该值为
FALSE时,禁用SSL握手中的ALPN(如果SSL后端的libcurl内建支持) 用于协商到 http2
- 该值为
CURLOPT_SSL_ENABLE_NPN:布尔值- 该值为
FALSE时,禁用SSL握手中的 NPN(如果SSL后端的libcurl内建支持),用于协商到 http2
- 该值为
CURLOPT_SSL_VERIFYPEER:布尔值- 该值为
FALSE时,禁止cURL验证对等证书(peer's certificate) - 要验证的交换证书可以在
CURLOPT_CAINFO选项中设置,或在 CURLOPT_CAPATH中设置证书目录
- 该值为
CURLOPT_SSL_VERIFYSTATUS:布尔值- 该值为
TRUE时验证证书状态
- 该值为
CURLOPT_TCP_FASTOPEN:布尔值- 该值为
TRUE时开启TCPFast Open
- 该值为
CURLOPT_TFTP_NO_OPTIONS:布尔值- 该值为
TRUE时,不发送TFTP的options请求
- 该值为
CURLOPT_TRANSFERTEXT:布尔值- 该值为
TRUE时,对FTP传输使用ASCII模式 - 对于LDAP,它检索纯文本信息而非 HTML
- 在
Windows系统中,系统不会把STDOUT设置成二进制 模式
- 该值为
CURLOPT_UNRESTRICTED_AUTH:布尔值- 该值为
TRUE时,即使主机名已改变,使用CURLOPT_FOLLOWLOCATION重定向header中的多个location时也将继续发送用户名和密码信息
- 该值为
CURLOPT_UPLOAD:布尔值- 该值为
TRUE时,准备上传
- 该值为
CURLOPT_VERBOSE:布尔值- 该值为
TRUE时输出所有的信息,写入到STDERR,或在CURLOPT_STDERR中指定的文件
- 该值为
CURLOPT_BUFFERSIZE:整型- 每次读入的缓冲的尺寸
CURLOPT_CONNECTTIMEOUT:整型- 在尝试连接时等待的秒数。设置为0,则无限等待
CURLOPT_CONNECTTIMEOUT_MS:整型- 尝试连接等待的时间,以毫秒为单位。设置为0,则无限等待。
CURLOPT_DNS_CACHE_TIMEOUT:整型- 设置在内存中缓存
DNS的时间,默认为120秒(两分钟)
- 设置在内存中缓存
CURLOPT_EXPECT_100_TIMEOUT_MS:整型- 超时预计: 100毫秒内的
continue响应 默认为1000毫秒
- 超时预计: 100毫秒内的
CURLOPT_FTPSSLAUTH:常量- FTP验证方式(启用的时候):CURLFTPAUTH_SSL (首先尝试SSL),CURLFTPAUTH_TLS (首先尝试TLS)或CURLFTPAUTH_DEFAULT (让cURL 自个儿决定)
CURLOPT_HEADEROPT:常量- 如何处理
Header。有以下常量值:CURLHEADER_UNIFIED:CURLOPT_HTTPHEADER中指定的header将用于服务器和代理的请求。启用此选项后,CURLOPT_PROXYHEADER将不起任何作用CURLHEADER_SEPARATE:默认值。使CURLOPT_HTTPHEADER标头只被发送到服务器而不是代理。 必须使用CURLOPT_PROXYHEADER设置代理标头才能使用
- 如何处理
CURLOPT_HTTP_VERSION:常量 -CURL_HTTP_VERSION_NONE(默认值,让cURL自己判断使用哪个版本) -CURL_HTTP_VERSION_1_0(强制使用 HTTP/1.0) -CURL_HTTP_VERSION_1_1(强制使用 HTTP/1.1)CURLOPT_HTTPAUTH:常量- 使用的
HTTP验证方法。可使用|位或(OR)操作符结合多个值,cURL 会让服务器选择受支持的方法,并选择最好的那个。可选项有:CURLAUTH_BASICCURLAUTH_DIGESTCURLAUTH_GSSNEGOTIATECURLAUTH_NTLMCURLAUTH_ANY:CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM的别名CURLAUTH_ANYSAFE:CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM的别名
- 使用的
CURLOPT_INFILESIZE:整型- 希望传给远程站点的文件尺寸,字节(byte)为单位
- 无法用这个选项阻止
libcurl发送更多的数据,确切发送什么取决于 CURLOPT_READFUNCTION
CURLOPT_LOW_SPEED_LIMIT:整型- 传输速度,每秒字节(bytes)数,根据
CURLOPT_LOW_SPEED_TIME秒数统计是否因太慢而取消传输
- 传输速度,每秒字节(bytes)数,根据
CURLOPT_LOW_SPEED_TIME:整型- 当传输速度小于
CURLOPT_LOW_SPEED_LIMIT时(bytes/sec),PHP会判断是否因太慢而取消传输
- 当传输速度小于
CURLOPT_MAXCONNECTS:整型- 允许的最大连接数量。达到限制时,会通过
CURLOPT_CLOSEPOLICY决定应该关闭哪些连接
- 允许的最大连接数量。达到限制时,会通过
CURLOPT_MAXREDIRS:整型- 指定最多的
HTTP重定向次数,该选项与CURLOPT_FOLLOWLOCATION一起使用的
- 指定最多的
CURLOPT_PORT:整型- 指定连接端口
CURLOPT_POSTREDIR:整型- 位掩码,
1(301 永久重定向),2(302 Found) 和4(303 See Other) - 设置
CURLOPT_FOLLOWLOCATION时,在什么情况下需要再次HTTP POST到重定向网址
- 位掩码,
CURLOPT_PROTOCOLS:常量- CURLPROTO_* 的位掩码。 启用时,会限制
libcurl在传输过程中可使用哪些协议 - 默认
libcurl将使用所有支持的协议 - 可用的协议选项为: CURLPROTO_HTTP、 CURLPROTO_HTTPS、 CURLPROTO_FTP、 CURLPROTO_FTPS、 CURLPROTO_SCP、 CURLPROTO_SFTP、 CURLPROTO_TELNET、 CURLPROTO_LDAP、 CURLPROTO_LDAPS、 CURLPROTO_DICT、 CURLPROTO_FILE、 CURLPROTO_TFTP、 CURLPROTO_ALL
- CURLPROTO_* 的位掩码。 启用时,会限制
CURLOPT_PROXYAUTH:常量 -HTTP代理连接的验证方式。使用在CURLOPT_HTTPAUTH中的位掩码- 当前仅仅支持
CURLAUTH_BASIC和 CURLAUTH_NTLM
- 当前仅仅支持
CURLOPT_PROXYPORT:整型- 代理服务器的端口。端口也可以在CURLOPT_PROXY中设置
CURLOPT_PROXYTYPE:常量- 可选值:CURLPROXY_HTTP (默认值) 、CURLPROXY_SOCKS4、 CURLPROXY_SOCKS5、
CURLPROXY_SOCKS4A或 CURLPROXY_SOCKS5_HOSTNAME
- 可选值:CURLPROXY_HTTP (默认值) 、CURLPROXY_SOCKS4、 CURLPROXY_SOCKS5、
CURLOPT_REDIR_PROTOCOLS:常量- CURLPROTO_* 值的位掩码。如果被启用,位掩码会限制
libcurl在 CURLOPT_FOLLOWLOCATION开启时,使用的协议。 默认允许除FILE和SCP外所有协议
- CURLPROTO_* 值的位掩码。如果被启用,位掩码会限制
CURLOPT_RESUME_FROM:常量- 在恢复传输时,传递字节为单位的偏移量(用来断点续传)
CURLOPT_SSL_OPTIONS:常量- 设置SSL行为选项,它是以下任何常量的位掩码:
CURLSSLOPT_ALLOW_BEAST:不要尝试使用任何变通方法来解决SSL3和TLS1.0协议中的安全漏洞CURLSSLOPT_NO_REVOKE:对存在此类行为的SSL后端禁用证书吊销检查
- 设置SSL行为选项,它是以下任何常量的位掩码:
CURLOPT_SSL_VERIFYHOST:整型- 0:不检查名称
- 1:检查服务器SSL证书中是否存在一个公用名(common name)
- 2:默认值。检查公用名是否存在,并且是否与提供的主机名匹配
CURLOPT_SSLVERSION:常量或整型- 0:
CURL_SSLVERSION_DEFAULT - 1:
CURL_SSLVERSION_TLSv1 - 2:
CURL_SSLVERSION_SSLv2 - 3:
CURL_SSLVERSION_SSLv3 - 4:
CURL_SSLVERSION_TLSv1_0 - 5:
CURL_SSLVERSION_TLSv1_1 - 6:
CURL_SSLVERSION_TLSv1_2
- 0:
CURLOPT_STREAM_WEIGHT:整型- 设置
stream weight数值 (1和256之间的数字)
- 设置
CURLOPT_TIMECONDITION:常量- 设置如何对待 CURLOPT_TIMEVALUE
- CURL_TIMECOND_IFMODSINCE:默认值。仅在页面
CURLOPT_TIMEVALUE之后修改,才返回页面。没有修改则返回 "304 Not Modified" 头,如果CURLOPT_HEADER为TRUE的话 - CURL_TIMECOND_IFUNMODSINCE:与上相反
- CURL_TIMECOND_IFMODSINCE:默认值。仅在页面
- 设置如何对待 CURLOPT_TIMEVALUE
CURLOPT_TIMEOUT:整型- 允许
cURL函数执行的最长秒数
- 允许
CURLOPT_TIMEOUT_MS:整型- 设置cURL允许执行的最长毫秒数
CURLOPT_TIMEVALUE:整型- UNIX时间戳,该时间时间会被
CURLOPT_TIMECONDITION使用
- UNIX时间戳,该时间时间会被
CURLOPT_MAX_RECV_SPEED_LARGE:整型- 如果下载速度超过了此速度(以每秒字节数来统计) ,即传输过程中累计的平均数,传输就会降速到这个参数的值。默认不限速
CURLOPT_MAX_SEND_SPEED_LARGE:整型- 如果上传速度超过了此速度(以每秒字节数来统计),即传输过程中累计的平均数 ,传输就会降速到这个参数的值。默认不限速
CURLOPT_SSH_AUTH_TYPES:常量- 由 CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST,
CURLSSH_AUTH_KEYBOARD中的一个或多个组成的位掩码 - 设置为
CURLSSH_AUTH_ANY以让libcurl选择一个
- 由 CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST,
CURLOPT_IPRESOLVE:常量- 允许程序选择想要解析的
IP地址类别,只有在地址有多种ip类别的时候才能用。可选值有:CURL_IPRESOLVE_WHATEVER:默认值CURL_IPRESOLVE_V4CURL_IPRESOLVE_V6
- 允许程序选择想要解析的
CURLOPT_FTP_FILEMETHOD:常量- 告诉
curl使用哪种方式来获取 FTP(s) 服务器上的文件。可选值有:CURLFTPMETHOD_MULTICWDCURLFTPMETHOD_NOCWDCURLFTPMETHOD_SINGLECWD
- 告诉
CURLOPT_CAINFO:字符串- 保存着一个或多个用来让服务端验证的证书的文件名
- 该参数仅仅在和
CURLOPT_SSL_VERIFYPEER一起使用时才有意义
CURLOPT_CAPATH:字符串- 保存着多个CA证书的目录
- 该参数和
CURLOPT_SSL_VERIFYPEER一起使用
CURLOPT_COOKIE:字符串- 设定
HTTP请求中"Cookie: "部分的内容 - 多个
cookie用分号分隔,分号后带一个空格 - 例如:
"timestamp=1521707867; username=temp"
- 设定
CURLOPT_COOKIEFILE:字符串- 包含
cookie数据的文件名 -cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部风格 - 如果文件名是空的,不会加载 cookie,但
cookie的处理仍旧启用
- 包含
CURLOPT_COOKIEJAR:字符串- 连接结束后(比如调用
curl_close后),保存cookie信息的文件
- 连接结束后(比如调用
CURLOPT_CUSTOMREQUEST:字符串 -HTTP请求时,使用自定义的Method来代替GET或HEAD。对DELETE或者其他更隐蔽的HTTP请求有用CURLOPT_DEFAULT_PROTOCOL:字符串 -URL不带协议的时候,使用的默认协议CURLOPT_DNS_INTERFACE:字符串- 设置DNS解析器应绑定到的网络接口的名称。必须是接口名称,而不是地址
CURLOPT_DNS_LOCAL_IP4:字符串- 设置解析程序应绑定到的本地IPv4地址。参数应包含单个数字IPv4地址作为字符串
CURLOPT_DNS_LOCAL_IP6:字符串- 设置解析程序应绑定的本地IPv6地址。参数应包含单个数字IPv6地址作为字符串
CURLOPT_EGDSOCKET:字符串- 类似CURLOPT_RANDOM_FILE,除了一个Entropy Gathering Daemon套接字
CURLOPT_ENCODING:字符串- HTTP请求头中"Accept-Encoding: "的值
- 这使得能够解码响应的内容。 支持的编码有
identity,deflate和gzip。如果为空字符串"",会发送所有支持的编码类型
CURLOPT_FTPPORT:字符串- 用来获取供FTP
PORT指令所需要的IP地址 PORT指令告诉远程服务器连接到我们指定的IP地址- 这个字符串可以是纯文本的IP地址、主机名、一个网络接口名(UNIX下)或者只是一个'-'来使用默认的
IP地址
- 用来获取供FTP
CURLOPT_INTERFACE:字符串- 发送的网络接口(interface),可以是一个接口名、IP 地址或者是一个主机名
CURLOPT_KEYPASSWD:字符串- 使用
CURLOPT_SSLKEY或CURLOPT_SSH_PRIVATE_KEYFILE私钥时的密码
- 使用
CURLOPT_KRB4LEVEL:字符串 -KRB4(Kerberos 4) 安全级别。下面的任何值都是有效的(从低到高的顺序):clear、safe、confidential、private.。如果字符串以上这些,将使用private- 该选项设置为
NULL时将禁用KRB4安全认证 - 目前
KRB4安全认证只能用于FTP传输
- 该选项设置为
CURLOPT_LOGIN_OPTIONS:字符串- 可用于设置协议特定的登录选项,例如通过
AUTH= NTLM或AUTH = *的首选身份验证机制,并应与CURLOPT_USERNAME选项一起使用
- 可用于设置协议特定的登录选项,例如通过
CURLOPT_PINNEDPUBLICKEY:字符串- 设置固定的公钥。该字符串可以是固定公钥的文件名。期望的文件格式是“PEM”或“DER”
- 该字符串也可以是任意数量的base64编码的sha256哈希,前面是“sha256 //”,并以“;”分隔
CURLOPT_POSTFIELDS:字符串- 全部数据使用HTTP协议中的
POST操作来发送
- 全部数据使用HTTP协议中的
CURLOPT_PRIVATE:字符串- 应与此cURL句柄关联的任何数据。随后可以使用curl_getinfo()的CURLINFO_PRIVATE选项检索此数据
- cURL对此数据不做任何处理
- 使用 cURL多句柄时,此私有数据通常是标识标准 cURL句柄的唯一键
CURLOPT_PROXY:字符串 -HTTP代理通道CURLOPT_PROXY_SERVICE_NAME:字符串- 代理验证服务的名称
CURLOPT_PROXYUSERPWD:字符串- 一个用来连接到代理的
[username]:[password]格式的字符串
- 一个用来连接到代理的
CURLOPT_RANDOM_FILE:字符串- 一个被用来生成
SSL随机数种子的文件名
- 一个被用来生成
CURLOPT_RANGE:字符串- 以"X-Y"的形式,其中X和Y都是可选项获取数据的范围,以字节计
- HTTP传输线程也支持几个这样的重复项中间用逗号分隔如"X-Y,N-M"
CURLOPT_REFERER:字符串- 在HTTP请求头中"Referer: "的内容
CURLOPT_SERVICE_NAME:字符串- 验证服务的名称
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5:字符串- 远程主机公钥(public key) 的
MD5校验值,包含32位长的16进制数值 - 在不匹配的时候
libcurl会拒绝连接 - 此选项仅用于
SCP和SFTP的传输
- 远程主机公钥(public key) 的
CURLOPT_SSH_PUBLIC_KEYFILE:字符串- 公钥的文件名
- 如果未被使用且设置了
HOME环境变量,则libcurl默认为$HOME / .ssh / id_dsa.pub - 如果未设置
HOME,则libcurl默认为当前目录中的id_dsa.pub
CURLOPT_SSH_PRIVATE_KEYFILE:字符串- 私钥的文件名
- 如果未被使用且设置了
HOME环境变量,则libcurl默认为$HOME / .ssh / id_dsa - 如果未设置
HOME,则libcurl默认为当前目录中的id_dsa - 如果文件受密码保护,请使用
CURLOPT_KEYPASSWD设置密码
CURLOPT_SSL_CIPHER_LIST:字符串- 一个SSL的加密算法列表。例如RC4-SHA和TLSv1都是可用的加密列表
CURLOPT_SSLCERT:字符串- 一个包含
PEM格式证书的文件名
- 一个包含
CURLOPT_SSLCERTPASSWD:字符串- 使用
CURLOPT_SSLCERT证书需要的密码
- 使用
CURLOPT_SSLCERTTYPE:字符串- 证书的类型。支持的格式有
PEM(默认值),DER和ENG
- 证书的类型。支持的格式有
CURLOPT_SSLENGINE:字符串- 用来在
CURLOPT_SSLKEY中指定的SSL私钥的加密引擎变量
- 用来在
CURLOPT_SSLENGINE_DEFAULT:字符串- 用来做非对称加密操作的变量
CURLOPT_SSLKEY:字符串- 包含
SSL私钥的文件名
- 包含
CURLOPT_SSLKEYPASSWD:字符串- 在 CURLOPT_SSLKEY中指定了的SSL私钥的密码
- 由于该选项包含了敏感信息,请注意保证该PHP脚本的安全
CURLOPT_SSLKEYTYPE:字符串 -CURLOPT_SSLKEY中规定的私钥的加密类型,支持的密钥类型为PEM(默认值)、DER和ENG。CURLOPT_UNIX_SOCKET_PATH:字符串- 使用
Unix套接字作为连接,并用指定的string作为路径
- 使用
CURLOPT_URL:字符串- 需要获取的
URL地址,也可以在curl_init() 初始化会话的时候
- 需要获取的
CURLOPT_USERAGENT:字符串- 在HTTP请求中包含一个"User-Agent: "头的字符串
CURLOPT_USERNAME:字符串- 验证中使用的用户名
CURLOPT_USERPWD:字符串- 传递一个连接中需要的用户名和密码,格式为:
[username]:[password]
- 传递一个连接中需要的用户名和密码,格式为:
CURLOPT_XOAUTH2_BEARER:字符串- 指定
OAuth 2.0 access token
- 指定
CURLOPT_CONNECT_TO:数组- 连接到指定的主机和端口,替换
URL中的主机和端口 - 接受指定字符串格式的数组:
HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT
- 连接到指定的主机和端口,替换
CURLOPT_HTTP200ALIASES:数组HTTP 200响应码数组,数组中的响应码被认为是正确的响应,而非错误
CURLOPT_HTTPHEADER:数组- 设置
HTTP头字段的数组 - 格式:
array('Content-type: text/plain', 'Content-length: 100')
- 设置
CURLOPT_POSTQUOTE:数组- 在
FTP请求执行完成后,在服务器上执行的一组array格式的FTP命令
- 在
CURLOPT_PROXYHEADER:数组- 传给代理的自定义
HTTP头
- 传给代理的自定义
CURLOPT_QUOTE:数组- 一组先于
FTP请求的在服务器上执行的FTP命令
- 一组先于
CURLOPT_RESOLVE:数组- 提供自定义地址,指定了主机和端口
- 包含主机、端口和
ip地址的字符串,组成array的每个元素以冒号分隔 - 格式:
array("example.com:80:127.0.0.1")
CURLOPT_FILE:文件流资源- 设置输出文件,默认为
STDOUT(浏览器)
- 设置输出文件,默认为
CURLOPT_INFILE:文件流资源- 上传文件时需要读取的文件
CURLOPT_STDERR:文件流资源- 错误输出的地址,取代默认的
STDERR
- 错误输出的地址,取代默认的
CURLOPT_WRITEHEADER:文件流资源- 设置
header部分内容的写入的文件地址
- 设置
CURLOPT_HEADERFUNCTION:回调函数- 该函数有两个参数,第一个是
cURL的资源句柄,第二个是输出的header数据 header数据的输出必须依赖这个函数,返回已写入的数据大小
- 该函数有两个参数,第一个是
CURLOPT_PASSWDFUNCTION:回调函数- 该函数有三个参数,第一个是
cURL的资源句柄,第二个是一个密码提示符,第三个参数是密码长度允许的最大值 - 返回密码的值
- 该函数有三个参数,第一个是
CURLOPT_PROGRESSFUNCTION:回调函数- 只有设置
CURLOPT_NOPROGRESS选项为FALSE时才会调用这个回调函数 - 该函数有五个参数,第一个是
cURL的资源句柄,第二个是预计要下载的总字节(bytes)数。第三个是目前下载的字节数,第四个是预计传输中总上传字节数,第五个是目前上传的字节数 - 返回非零值将中断传输
- 只有设置
CURLOPT_READFUNCTION:回调函数- 该函数有三个参数,第一个是
cURL resource,第二个是通过选项CURLOPT_INFILE传给cURL的stream resource,第三个参数是最大可以读取的数据的数量 - 必须返回一个字符串,长度小于或等于请求的数据量(第三个参数)
- 返回空字符串作为
EOF(文件结束) 信号
- 该函数有三个参数,第一个是
CURLOPT_WRITEFUNCTION:回调函数- 该函数应接受两个参数。第一个是
cURL resource,第二个是要写入的数据字符串 - 数据必须在函数中被保存
- 函数必须准确返回写入数据的字节数,否则传输会被一个错误所中断
- 该函数应接受两个参数。第一个是
CURLOPT_SHARE:curl_share_init()返回的结果- 使
cURL可以处理共享句柄里的数据
- 使
4. 示例
<?php
// curl_setopt()
// 给cURL会话设置传输选项
$ch = curl_init();
$search = '极速教程 网尚科技';
$params = curl_escape($ch, $search);
$url = 'http://www.baidu.com/s?wd='.$params;
curl_setopt($ch, CURLOPT_URL, $url);// 配置URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);// 配置相关参数:这里的配置为 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
// 下面仅作一些展示,实际上可能不需要配置这么多信息
// 这些信息都可以在浏览器的开发者模式下,选择Network,选择URL(例如www.baidu.com),在Headers中的 Request Headers都能发现
curl_setopt($ch, CURLOPT_REFERER, 'www.baidu.com');
$header = [
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);// 该配置项接受一个数组
$useragent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36';
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
$encoding = 'gzip, deflate, br';
curl_setopt($ch, CURLOPT_ENCODING, $encoding);
$res = curl_exec($ch);
curl_close($ch);
echo $res;// 输出 url 响应页面的源代码
5. 延展阅读
- curl_setopt_array():给
cURL传输会话批量设置选项