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时,禁用EPRTLPRT,仅仅使用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时,禁用TCPNagle算法,减少网络上的小包数量
  • CURLOPT_FTPASCII:布尔值。CURLOPT_TRANSFERTEXT的别名
  • CURLOPT_FTPLISTONLY:布尔值
    • 该值为TRUE时只列出FTP目录的名字
  • CURLOPT_HEADER:布尔值
    • 该值为TRUE时,将头文件的信息作为数据流输出
  • CURLINFO_HEADER_OUT:布尔值
    • 该值为TRUE时,追踪句柄的请求字符串
  • CURLOPT_HTTPGET:布尔值
    • 该值为TRUE时,设置HTTPmethodGET
    • 由于默认是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时,不发送TFTPoptions请求
  • 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毫秒
  • CURLOPT_FTPSSLAUTH:常量
    • FTP验证方式(启用的时候):CURLFTPAUTH_SSL (首先尝试SSL),CURLFTPAUTH_TLS (首先尝试TLS)或CURLFTPAUTH_DEFAULT (让cURL 自个儿决定)
  • CURLOPT_HEADEROPT:常量
    • 如何处理Header。有以下常量值:
      • CURLHEADER_UNIFIEDCURLOPT_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_BASIC
      • CURLAUTH_DIGEST
      • CURLAUTH_GSSNEGOTIATE
      • CURLAUTH_NTLM
      • CURLAUTH_ANYCURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM的别名
      • CURLAUTH_ANYSAFECURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM的别名
  • CURLOPT_INFILESIZE:整型
    • 希望传给远程站点的文件尺寸,字节(byte)为单位
    • 无法用这个选项阻止libcurl发送更多的数据,确切发送什么取决于 CURLOPT_READFUNCTION
  • CURLOPT_LOW_SPEED_LIMIT:整型
    • 传输速度,每秒字节(bytes)数,根据CURLOPT_LOW_SPEED_TIME秒数统计是否因太慢而取消传输
  • 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
  • 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
  • CURLOPT_REDIR_PROTOCOLS:常量
    • CURLPROTO_* 值的位掩码。如果被启用,位掩码会限制libcurl在 CURLOPT_FOLLOWLOCATION开启时,使用的协议。 默认允许除FILESCP外所有协议
  • CURLOPT_RESUME_FROM:常量
    • 在恢复传输时,传递字节为单位的偏移量(用来断点续传)
  • CURLOPT_SSL_OPTIONS:常量
    • 设置SSL行为选项,它是以下任何常量的位掩码:
      • CURLSSLOPT_ALLOW_BEAST:不要尝试使用任何变通方法来解决SSL3和TLS1.0协议中的安全漏洞
      • CURLSSLOPT_NO_REVOKE:对存在此类行为的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
  • CURLOPT_STREAM_WEIGHT:整型
    • 设置stream weight数值 (1256之间的数字)
  • CURLOPT_TIMECONDITION:常量
    • 设置如何对待 CURLOPT_TIMEVALUE
      • CURL_TIMECOND_IFMODSINCE:默认值。仅在页面CURLOPT_TIMEVALUE之后修改,才返回页面。没有修改则返回 "304 Not Modified" 头,如果CURLOPT_HEADER为TRUE的话
      • CURL_TIMECOND_IFUNMODSINCE:与上相反
  • CURLOPT_TIMEOUT:整型
    • 允许cURL函数执行的最长秒数
  • CURLOPT_TIMEOUT_MS:整型
    • 设置cURL允许执行的最长毫秒数
  • CURLOPT_TIMEVALUE:整型
    • UNIX时间戳,该时间时间会被CURLOPT_TIMECONDITION使用
  • 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选择一个
  • CURLOPT_IPRESOLVE:常量
    • 允许程序选择想要解析的IP地址类别,只有在地址有多种ip类别的时候才能用。可选值有:
      • CURL_IPRESOLVE_WHATEVER:默认值
      • CURL_IPRESOLVE_V4
      • CURL_IPRESOLVE_V6
  • CURLOPT_FTP_FILEMETHOD:常量
    • 告诉curl使用哪种方式来获取 FTP(s) 服务器上的文件。可选值有:
      • CURLFTPMETHOD_MULTICWD
      • CURLFTPMETHOD_NOCWD
      • CURLFTPMETHOD_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来代替GETHEAD。对 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: "的值
    • 这使得能够解码响应的内容。 支持的编码有identitydeflategzip。如果为空字符串"",会发送所有支持的编码类型
  • CURLOPT_FTPPORT:字符串
    • 用来获取供FTPPORT指令所需要的IP地址
    • PORT 指令告诉远程服务器连接到我们指定的IP地址
    • 这个字符串可以是纯文本的IP地址、主机名、一个网络接口名(UNIX下)或者只是一个'-'来使用默认的IP地址
  • CURLOPT_INTERFACE:字符串
    • 发送的网络接口(interface),可以是一个接口名、IP 地址或者是一个主机名
  • CURLOPT_KEYPASSWD:字符串
    • 使用CURLOPT_SSLKEYCURLOPT_SSH_PRIVATE_KEYFILE私钥时的密码
  • CURLOPT_KRB4LEVEL:字符串 -KRB4(Kerberos 4) 安全级别。下面的任何值都是有效的(从低到高的顺序):clearsafeconfidentialprivate.。如果字符串以上这些,将使用private
    • 该选项设置为NULL时将禁用KRB4安全认证
    • 目前KRB4安全认证只能用于FTP传输
  • CURLOPT_LOGIN_OPTIONS:字符串
    • 可用于设置协议特定的登录选项,例如通过AUTH= NTLMAUTH = *的首选身份验证机制,并应与CURLOPT_USERNAME选项一起使用
  • CURLOPT_PINNEDPUBLICKEY:字符串
    • 设置固定的公钥。该字符串可以是固定公钥的文件名。期望的文件格式是“PEM”或“DER”
    • 该字符串也可以是任意数量的base64编码的sha256哈希,前面是“sha256 //”,并以“;”分隔
  • CURLOPT_POSTFIELDS:字符串
    • 全部数据使用HTTP协议中的 POST 操作来发送
  • 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会拒绝连接
    • 此选项仅用于SCPSFTP的传输
  • 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 (默认值), DERENG
  • CURLOPT_SSLENGINE:字符串
    • 用来在CURLOPT_SSLKEY中指定的SSL私钥的加密引擎变量
  • CURLOPT_SSLENGINE_DEFAULT:字符串
    • 用来做非对称加密操作的变量
  • CURLOPT_SSLKEY:字符串
    • 包含SSL私钥的文件名
  • CURLOPT_SSLKEYPASSWD:字符串
    • 在 CURLOPT_SSLKEY中指定了的SSL私钥的密码
    • 由于该选项包含了敏感信息,请注意保证该PHP脚本的安全
  • CURLOPT_SSLKEYTYPE:字符串 -CURLOPT_SSLKEY中规定的私钥的加密类型,支持的密钥类型为PEM(默认值)、DERENG
  • 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传给cURLstream resource,第三个参数是最大可以读取的数据的数量
    • 必须返回一个字符串,长度小于或等于请求的数据量(第三个参数)
    • 返回空字符串作为EOF(文件结束) 信号
  • CURLOPT_WRITEFUNCTION:回调函数
    • 该函数应接受两个参数。第一个是cURL resource,第二个是要写入的数据字符串
    • 数据必须在函数中被保存
    • 函数必须准确返回写入数据的字节数,否则传输会被一个错误所中断
  • CURLOPT_SHAREcurl_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. 延展阅读