简介
PHP
支持
Daniel Stenberg
创建的
libcurl
库,能够连接通讯各种服务器、使用各种协议。
libcurl
目前支持的协议有
http
、
https
、
ftp
、
gopher
、
telnet
、
dict
、
file
、
ldap
。
libcurl
同时支持
HTTPS
证书、
HTTP POST
、
HTTP PUT
、
FTP
上传(也能通过
PHP
的
FTP
扩展完成)、
HTTP
基于表单的上传、代理、
cookies
、用户名+密码的认证。
一个最简样例
curl_init
curl_init
curl_init ([ string $url = NULL ] ) : resource
如果提供了该参数,
CURLOPT_URL
选项将会被设置成这个值。你也可以使用
curl_setopt()
函数手动地设置这个值。
初始化新的会话,成功则返回
cURL
句柄,出错则返回
FALSE
。
curl_exec
curl_exec ( resource $ch ) : mixed
由
curl_init()
返回的
cURL
句柄。
执行给定的
cURL
会话。成功时返回
TRUE
, 或者在失败时返回
FALSE
。 然而,如果 设置了
CURLOPT_RETURNTRANSFER
选项,函数执行成功时会返回执行的结果,失败时返回
FALSE
。
这个函数应该在初始化一个
cURL
会话并且全部的选项都被设置后被调用。
curl_close
curl_close ( resource $ch ) : void
由
curl_init()
返回的
cURL
句柄。
关闭
cURL
会话并且释放所有资源。
cURL
句柄
ch
也会被删除。
没有返回值。
curl_reset
curl_reset ( resource $ch ) : void
由
curl_init()
返回的
cURL
句柄。
该函数将给定的
cURL
句柄所有选项重新设置为默认值,跟使用
curl_init()
创建的一样。在一次请求中需要发起多次
cURL
会话时可以用此函数重置会话,以减少会话创建的次数。
没有返回值。
curl_errno
curl_errno ( resource $ch ) : int
由
curl_init()
返回的
cURL
句柄。
返回最近一次
cURL
操作的错误号;或在没有错误发生时返回 0 (零)。
curl_error
curl_error ( resource $ch ) : string
由
curl_init()
返回的
cURL
句柄。
返回最近一次
cURL
操作的文本错误详情;或者如果没有任何错误发生就返回 ‘’ (空字符串)
curl_copy_handle
curl_copy_handle ( resource $ch ) : resource
-
ch
由
curl_init()
返回的
cURL
句柄。
复制一个cURL句柄并保持相同的选项。
返回一个新的
cURL
句柄。
curl_setopt
curl_setopt ( resource $ch , int $option , mixed $value ) : bool
由
curl_init()
返回的
cURL
句柄。
-
option
需要设置的
CURLOPT_XXX
选项。
-
value
将设置在
option
选项上的值。
为 cURL 会话句柄设置选项。成功时返回 TRUE, 或者在失败时返回 FALSE。
请求相关的选项
响应相关的选项
HTTP
请求时,使用自定义的
Method
来代替
GET
或
HEAD
。对
DELETE
或者其他更隐蔽的
HTTP
请求有用。 有效值如
GET
,
POST
,
CONNECT
等
CURLOPT_POSTFIELDS
全部数据使用
HTTP
协议中的
POST
操作来发送。 这个参数可以是
urlencoded
后的字符串,类似
para1=val1¶2=val2&...
,也可以使用一个以字段名为键值,字段数据为值的数组。 如果
value
是一个数组,
Content-Type
头将会被设置成
multipart/form-data
。
CURLOPT_COOKIE
设定
HTTP
请求中
Cookie:
部分的内容。多个
cookie
用分号分隔,分号后带一个空格(例如,
fruit=apple; colour=red
)。
CURLOPT_ENCODING
HTTP
请求头中
Accept-Encoding:
的值。 这使得能够解码响应的内容。 支持的编码有
identity
,
deflate
和
gzip
。如果为空字符串””,会发送所有支持的编码类型。
CURLOPT_REFERER
在
HTTP
请求头中
Referer:
的内容。
CURLOPT_USERAGENT
在
HTTP
请求中包含一个
User-Agent:
头的字符串。
CURLOPT_HTTPHEADER
设置
HTTP
头字段的数组。格式:
array('Content-type: text/plain', 'Content-length: 100')
SSL认证服务端相关的选项
尝试连接等待的时间,以毫秒为单位。设置为0,则无限等待。 如果 libcurl 编译时使用系统标准的名称解析器(
standard system name resolver
),那部分的连接仍旧使用以秒计的超时解决方案,最小超时时间还是一秒钟。
CURLOPT_TIMEOUT
允许
cURL
函数执行的最长秒数。包括尝试连接和连接后接收数据的时间
CURLOPT_TIMEOUT_MS
设置
cURL
允许执行的最长毫秒数。 如果
libcurl
编译时使用系统标准的名称解析器(
standard system name resolver
),那部分的连接仍旧使用以秒计的超时方案,最小超时时间还是一秒钟。
CURLOPT_NOSIGNAL
false, 在
SAPI
多线程传输时此项被默认启用
true
时忽略所有的
cURL
传递给
PHP
进行的信号。
网上据说设置的超时时间小于1000ms时此选项需要设置为
true
,个人实验的结果是不管设为true还是false,还是不设置,均不影响毫秒级超时时间的生效
linux
上
openssl
库的默认证书文件
default_cert_file
和默认证书目录
default_cert_dir
下的证书,可以验证常用的服务器证书。
如果你不需要特殊的证书包,可以使用Mozilla提供的通用CA包,你可以在
这里
下载(由cURL的维护者提供)。
如果要使用 CURLOPT_CAPATH 选项,应该为创建的所有有效证书创建一个目录,然后使用
openssl
附带的
c_rehash
脚本“准备”该目录。
如果不使用 c_rehash 程序,curl将忽略您设置的目录中的任何文件。
c_rehash 命令貌似只有 linux 上安装 openssl-perl 后可以使用
SSL认证客户端相关的选项
设置为 1 是检查服务器SSL证书中是否存在一个公用名(common name)。译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。 设置成 2,会检查公用名是否存在,并且是否与提供的主机名匹配。 0 为不检查名称。 在生产环境中,这个值应该是 2(默认值)。
CURLOPT_CAINFO
一个保存着1个或多个认证机构公钥的文件名。这个选项是和
CURLOPT_SSL_VERIFYPEER
一起使用的。可能需要绝对路径。
CURLOPT_CAPATH
一个保存着多个
CA
证书的目录。这个选项是和
CURLOPT_SSL_VERIFYPEER
一起使用的。
curl_setopt_array
-
一个
array
用来确定将被设置的选项及其值。数组的键值必须是一个有效的
curl_setopt()
常量或者是它们对等的整数值。
为
cURL
传输会话批量设置选项。这个函数对于需要设置大量的
cURL
选项是非常有用的,不需要重复地调用
curl_setopt()
。
如果全部的选项都被成功设置,返回
TRUE
。如果一个选项不能被成功设置,马上返回
FALSE
,忽略其后的任何在
options
数组中的选项。
curl_getinfo
-
CURLINFO_EFFECTIVE_URL - 最后一个有效的URL地址
-
CURLINFO_HTTP_CODE - 最后一个收到的HTTP代码
-
CURLINFO_FILETIME - 远程获取文档的时间,如果无法获取,则返回值为“-1”
-
CURLINFO_TOTAL_TIME - 最后一次传输所消耗的时间
-
CURLINFO_NAMELOOKUP_TIME - 名称解析所消耗的时间
-
CURLINFO_CONNECT_TIME - 建立连接所消耗的时间
-
CURLINFO_PRETRANSFER_TIME - 从建立连接到准备传输所使用的时间
-
CURLINFO_STARTTRANSFER_TIME - 从建立连接到传输开始所使用的时间
-
CURLINFO_REDIRECT_TIME - 在事务传输开始前重定向所使用的时间
-
CURLINFO_SIZE_UPLOAD - 以字节为单位返回上传数据量的总值
-
CURLINFO_SIZE_DOWNLOAD - 以字节为单位返回下载数据量的总值
-
CURLINFO_SPEED_DOWNLOAD - 平均下载速度
-
CURLINFO_SPEED_UPLOAD - 平均上传速度
-
CURLINFO_HEADER_SIZE - header部分的大小
-
CURLINFO_HEADER_OUT - 发送请求的字符串
-
CURLINFO_REQUEST_SIZE - 在HTTP请求中有问题的请求的大小
-
CURLINFO_SSL_VERIFYRESULT - 通过设置CURLOPT_SSL_VERIFYPEER返回的SSL证书验证请求的结果
-
CURLINFO_CONTENT_LENGTH_DOWNLOAD - 从Content-Length: field中读取的下载内容长度
-
CURLINFO_CONTENT_LENGTH_UPLOAD - 上传内容大小的说明
-
CURLINFO_CONTENT_TYPE - 下载内容的Content-Type:值,NULL表示服务器没有发送有效的Content-Type: header
-
“url”
-
“content_type”
-
“http_code”
-
“header_size”
-
“request_size”
-
“filetime”
-
“ssl_verify_result”
-
“redirect_count”
-
“total_time”
-
“namelookup_time”
-
“connect_time”
-
“pretransfer_time”
-
“size_upload”
-
“size_download”
-
“speed_download”
-
“speed_upload”
-
“download_content_length”
-
“upload_content_length”
-
“starttransfer_time”
-
“redirect_time”
curl_version
返回一个关于 cURL 版本的信息的关联数组,包含如下元素:
CURL_HTTP_VERSION_NONE
(让 cURL 自己判断使用哪个版本)
CURL_HTTP_VERSION_1_0
、
CURL_HTTP_VERSION_1_1
或
CURL_HTTP_VERSION_2_0
,强制使用
HTTP/1.0
、
HTTP/1.1
、
HTTP/2.0
。
CURLOPT_HTTPAUTH
使用的 HTTP 验证方法。选项有:
CURLAUTH_BASIC
、
CURLAUTH_DIGEST
、
CURLAUTH_GSSNEGOTIATE
、
CURLAUTH_NTLM
、
CURLAUTH_ANY
和
CURLAUTH_ANYSAFE
。可以使用
|
位操作符结合多个值,
cURL
会让服务器选择受支持的方法,并选择最好的那个。
CURLAUTH_ANY
是
CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM
的别名。
CURLAUTH_ANYSAFE
是
CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM
的别名。