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
时将开启TLS
FalseStart
(一种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
时开启TCP
Fast 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_BASIC
CURLAUTH_DIGEST
CURLAUTH_GSSNEGOTIATE
CURLAUTH_NTLM
CURLAUTH_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_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
来代替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
传输会话批量设置选项