php curl 整理

安装:

cp -r /usr/src/php-devel/extensions/curl /tmp/curl 
cd /tmp/curl 
phpize 
./configure 
make install 
echo "extension = curl.so" > /etc/php/90_curl.ini 


基本使用步骤:

// create curl resource 
$ch = curl_init(); 

// set url 
curl_setopt($ch, CURLOPT_URL, "example.com"); 

//return the transfer as a string 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

// $output contains the output string 
$output = curl_exec($ch); 

// close curl resource to free up system resources 
curl_close($ch);


相关函数:

curl_close — 关闭一个cURL会话
curl_copy_handle — 复制一个cURL句柄和它的所有选项
curl_errno — 返回最后一次的错误号
curl_error — 返回一个保护当前会话最近一次错误的字符串
curl_escape — 使用 URL 编码给定的字符串
curl_unescape — 解码给定的 URL 编码的字符串
curl_exec — 执行一个cURL会话
curl_getinfo — 获取一个cURL连接资源句柄的信息
curl_init — 初始化一个cURL会话
curl_setopt_array — 为cURL传输会话批量设置选项
curl_setopt — 设置一个cURL传输选项

curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄
curl_multi_close — 关闭一组cURL句柄
curl_multi_exec — 运行当前 cURL 句柄的子连接
curl_multi_getcontent — 如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流
curl_multi_info_read — 获取当前解析的cURL的相关传输信息
curl_multi_init — 返回一个新cURL批处理句柄
curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select — 等待所有cURL批处理中的活动连接
curl_multi_setopt — 为 cURL 并行处理设置一个选项
curl_multi_strerror — 返回的字符串描述的错误代码

curl_share_close — 关闭一个共享curl句柄
curl_share_init — 关闭一个共享curl句柄
curl_share_setopt — 设置一个共享curl句柄选项

curl_strerror — 返回的字符串描述特定的错误代码
curl_file_create — 创建一个 CURLFile 对象
curl_pause — 暂停和恢复连接
curl_reset — 重置所有选项的libcurl的会话句柄
curl_version — 获取cURL版本信息
详细信息: http://php.net/manual/zh/ref.curl.php


必要函数摘取:

curl_getinfo — 获取一个cURL连接资源句柄的信息
mixed curl_getinfo ( resource $ch [, int $opt = 0 ] )获取最后一次传输的相关信息。
参数:
ch 由 curl_init() 返回的 cURL 句柄。
opt 这个参数可能是以下常量之一:
<strong>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请求中有问题的请求的大小</strong>
CURLINFO_SSL_VERIFYRESULT - 通过设置CURLOPT_SSL_VERIFYPEER返回的SSL证书验证请求的结果
<strong>CURLINFO_CONTENT_LENGTH_DOWNLOAD - 从Content-Length: field中读取的下载内容长度
CURLINFO_CONTENT_LENGTH_UPLOAD - 上传内容大小的说明
CURLINFO_CONTENT_TYPE - 下载内容的Content-Type:值,NULL表示服务器没有发送有效的Content-Type: header</strong>
返回值
如果 opt 被设置,以字符串形式返回它的值。否则,返回一个包含下列元素的关联数组(它们分别对应于 opt):
"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"

<?php
// 创建一个cURL句柄
$ch = curl_init('http://www.yahoo.com/');

// 执行
curl_exec($ch);

// 检查是否有错误发生
if(!curl_errno($ch))
{
 $info = curl_getinfo($ch);

 echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
}

// Close handle
curl_close($ch);
?>

$info = curl_getinfo($ch);
curl_close($ch); // close cURL handler

if (empty($info['http_code'])) {
        die("No HTTP code was returned"); 
} else {
    // load the HTTP codes
    $http_codes = parse_ini_file("path/to/the/ini/file/I/pasted/above");
    
    // echo results
    echo "The server responded: <br />";
    echo $info['http_code'] . " " . $http_codes[$info['http_code']];
}

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

[Informational 1xx]
100="Continue"
101="Switching Protocols"

[Successful 2xx]
200="OK"
201="Created"
202="Accepted"
203="Non-Authoritative Information"
204="No Content"
205="Reset Content"
206="Partial Content"

[Redirection 3xx]
300="Multiple Choices"
301="Moved Permanently"
302="Found"
303="See Other"
304="Not Modified"
305="Use Proxy"
306="(Unused)"
307="Temporary Redirect"

[Client Error 4xx]
400="Bad Request"
401="Unauthorized"
402="Payment Required"
403="Forbidden"
404="Not Found"
405="Method Not Allowed"
406="Not Acceptable"
407="Proxy Authentication Required"
408="Request Timeout"
409="Conflict"
410="Gone"
411="Length Required"
412="Precondition Failed"
413="Request Entity Too Large"
414="Request-URI Too Long"
415="Unsupported Media Type"
416="Requested Range Not Satisfiable"
417="Expectation Failed"

[Server Error 5xx]
500="Internal Server Error"
501="Not Implemented"
502="Bad Gateway"
503="Service Unavailable"
504="Gateway Timeout"
505="HTTP Version Not Supported"


curl_setopt — 设置一个cURL传输选项
bool curl_setopt ( resource $ch , int $option , mixed $value )为给定的cURL会话句柄设置一个选项。
参数
ch        由 curl_init() 返回的 cURL 句柄。
option 需要设置的CURLOPT_XXX选项。
value  将设置在option选项上的值。

对于下面的这些option的可选参数,value应该被设置一个bool类型的值:
CURLOPT_AUTOREFERER	当根据Location:重定向时,自动设置header中的Referer:信息。
	
CURLOPT_BINARYTRANSFER	在启用CURLOPT_RETURNTRANSFER的时候,返回原生的(Raw)输出。	

CURLOPT_COOKIESESSION	启用时curl会仅仅传递一个session cookie,忽略其他的cookie,默认状况下cURL会将所有的cookie返回给服务端。session cookie是指那些用来判断服务器端的session是否有效而存在的cookie。
	
CURLOPT_CRLF	启用时将Unix的换行符转换成回车换行符。	
CURLOPT_DNS_USE_GLOBAL_CACHE	启用时会启用一个全局的DNS缓存,此项为线程安全的,并且默认启用。	

CURLOPT_FAILONERROR	显示HTTP状态码,默认行为是忽略编号小于等于400的HTTP信息。
	
CURLOPT_FILETIME	启用时会尝试修改远程文档中的信息。结果信息会通过curl_getinfo()函数的CURLINFO_FILETIME选项返回。 curl_getinfo().	

CURLOPT_FOLLOWLOCATION	启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。
	
CURLOPT_FORBID_REUSE	在完成交互以后强迫断开连接,不能重用。	
CURLOPT_FRESH_CONNECT	强制获取一个新的连接,替代缓存中的连接。	
CURLOPT_FTP_USE_EPRT	启用时当FTP下载时,使用EPRT (或 LPRT)命令。设置为FALSE时禁用EPRT和LPRT,使用PORT命令 only.	
CURLOPT_FTP_USE_EPSV	启用时,在FTP传输过程中回复到PASV模式前首先尝试EPSV命令。设置为FALSE时禁用EPSV命令。	

CURLOPT_FTPAPPEND	启用时追加写入文件而不是覆盖它。
	
CURLOPT_FTPASCII	CURLOPT_TRANSFERTEXT的别名。	
CURLOPT_FTPLISTONLY	启用时只列出FTP目录的名字。	

CURLOPT_HEADER	启用时会将头文件的信息作为数据流输出。

CURLINFO_HEADER_OUT	启用时追踪句柄的请求字符串。

CURLOPT_HTTPGET	启用时会设置HTTP的method为GET,因为GET是默认是,所以只在被修改的情况下使用。

CURLOPT_HTTPPROXYTUNNEL 	 启用时会通过HTTP代理来传输。 

CURLOPT_MUTE 	 启用时将cURL函数中所有修改过的参数恢复默认值。

CURLOPT_NETRC 	 在连接建立以后,访问~/.netrc文件获取用户名和密码信息连接远程站点。 

CURLOPT_NOBODY 	 启用时将不对HTML中的BODY部分进行输出。

CURLOPT_NOPROGRESS 	 启用时关闭curl传输的进度条,此项的默认设置为启用。PHP自动地设置这个选项为TRUE,这个选项仅仅应当在以调试为目的时被改变。
CURLOPT_NOSIGNAL 	 启用时忽略所有的curl传递给php进行的信号。在SAPI多线程传输时此项被默认启用。 

CURLOPT_POST 	 启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。

CURLOPT_PUT 	 启用时允许HTTP发送文件,必须同时设置CURLOPT_INFILE和CURLOPT_INFILESIZE。 

CURLOPT_RETURNTRANSFER 	 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。 
CURLOPT_SSL_VERIFYPEER 	 禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。
CURLOPT_TRANSFERTEXT 	 启用后对FTP传输使用ASCII模式。对于LDAP,它检索纯文本信息而非HTML。在Windows系统上,系统不会把STDOUT设置成binary模式。 

CURLOPT_UNRESTRICTED_AUTH	 在使用CURLOPT_FOLLOWLOCATION产生的header中的多个locations中持续追加用户名和密码信息,即使域名已发生改变。

CURLOPT_UPLOAD 	 启用后允许文件上传。 

CURLOPT_VERBOSE 	 启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中。

对于下面的这些option的可选参数,value应该被设置一个integer类型的值:
CURLOPT_BUFFERSIZE	每次获取的数据中读入缓存的大小,但是不保证这个值每次都会被填满。	在cURL 7.10中被加入。
CURLOPT_CLOSEPOLICY	不是CURLCLOSEPOLICY_LEAST_RECENTLY_USED就是CURLCLOSEPOLICY_OLDEST,还存在另外三个CURLCLOSEPOLICY_,但是cURL暂时还不支持。	

CURLOPT_CONNECTTIMEOUT	在发起连接前等待的时间,如果设置为0,则无限等待。
	
CURLOPT_CONNECTTIMEOUT_MS	尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。

CURLOPT_DNS_CACHE_TIMEOUT	设置在内存中保存DNS信息的时间,默认为120秒。
	
CURLOPT_FTPSSLAUTH	FTP验证方式:CURLFTPAUTH_SSL (首先尝试SSL),CURLFTPAUTH_TLS (首先尝试TLS)或CURLFTPAUTH_DEFAULT (让cURL自动决定)。	在cURL 7.12.2中被加入。
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验证方法,可选的值有: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.


CURLOPT_INFILESIZE	设定上传文件的大小限制,字节(byte)为单位。
	
CURLOPT_LOW_SPEED_LIMIT	当传输速度小于CURLOPT_LOW_SPEED_LIMIT时(bytes/sec),PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。	

CURLOPT_LOW_SPEED_TIME	当传输速度小于CURLOPT_LOW_SPEED_LIMIT时(bytes/sec),PHP会根据CURLOPT_LOW_SPEED_TIME来判断是否因太慢而取消传输。
	
CURLOPT_MAXCONNECTS	允许的最大连接数量,超过是会通过CURLOPT_CLOSEPOLICY决定应该停止哪些连接。	

CURLOPT_MAXREDIRS	指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的。	

CURLOPT_PORT	用来指定连接端口。(可选项)

CURLOPT_PROTOCOLS	CURLPROTO_*的位域指。如果被启用,位域值会限定libcurl在传输过程中有哪些可使用的协议。这将允许你在编译libcurl时支持众多协议,但是限制只是用它们中被允许使用的一个子集。默认libcurl将会使用全部它支持的协议。参见CURLOPT_REDIR_PROTOCOLS.
可用的协议选项为: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_SOCKS5。
CURLOPT_REDIR_PROTOCOLS	CURLPROTO_*中的位域值。如果被启用,位域值将会限制传输线程在CURLOPT_FOLLOWLOCATION开启时跟随某个重定向时可使用的协议。这将使你对重定向时限制传输线程使用被允许的协议子集默认libcurl将会允许除FILE和SCP之外的全部协议。这个和7.19.4预发布版本种无条件地跟随所有支持的协议有一些不同。关于协议常量,请参照CURLOPT_PROTOCOLS。
CURLOPT_RESUME_FROM	在恢复传输时传递一个字节偏移量(用来断点续传)。	
CURLOPT_SSL_VERIFYHOST	1 检查服务器SSL证书中是否存在一个公用名(common name)。译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。2 检查公用名是否存在,并且是否与提供的主机名匹配。	
CURLOPT_SSLVERSION	使用的SSL版本(2 或 3)。默认情况下PHP会自己检测这个值,尽管有些情况下需要手动地进行设置。	
CURLOPT_TIMECONDITION	如果在CURLOPT_TIMEVALUE指定的某个时间以后被编辑过,则使用CURL_TIMECOND_IFMODSINCE返回页面,如果没有被修改过,并且CURLOPT_HEADER为true,则返回一个"304 Not Modified"的header, CURLOPT_HEADER为false,则使用CURL_TIMECOND_IFUNMODSINCE,默认值为CURL_TIMECOND_IFUNMODSINCE。	

CURLOPT_TIMEOUT	设置cURL允许执行的最长秒数。	

CURLOPT_TIMEOUT_MS	设置cURL允许执行的最长毫秒数。	在cURL 7.16.2中被加入。从PHP 5.2.3起可使用。

CURLOPT_TIMEVALUE	设置一个CURLOPT_TIMECONDITION使用的时间戳,在默认状态下使用的是CURL_TIMECOND_IFMODSINCE。

对于下面的这些option的可选参数,value应该被设置一个string类型的值:
CURLOPT_CAINFO	一个保存着1个或多个用来让服务端验证的证书的文件名。这个参数仅仅在和CURLOPT_SSL_VERIFYPEER一起使用时才有意义。 .	
CURLOPT_CAPATH	一个保存着多个CA证书的目录。这个选项是和CURLOPT_SSL_VERIFYPEER一起使用的。	

CURLOPT_COOKIE	设定HTTP请求中"Cookie: "部分的内容。多个cookie用分号分隔,分号后带一个空格(例如, "fruit=apple; colour=red")。	

CURLOPT_COOKIEFILE	包含cookie数据的文件名,cookie文件的格式可以是Netscape格式,或者只是纯HTTP头部信息存入文件。	

CURLOPT_COOKIEJAR	连接结束后保存cookie信息的文件。	

CURLOPT_CUSTOMREQUEST	使用一个自定义的请求信息来代替"GET"或"HEAD"作为HTTP请求。这对于执行"DELETE" 或者其他更隐蔽的HTTP请求。有效值如"GET","POST","CONNECT"等等。也就是说,不要在这里输入整个HTTP请求。例如输入"GET /index.html HTTP/1.0\r\n\r\n"是不正确的。在确定服务器支持这个自定义请求的方法前不要使用。

CURLOPT_EGDSOCKET	类似CURLOPT_RANDOM_FILE,除了一个Entropy Gathering Daemon套接字。	

CURLOPT_ENCODING	HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。

CURLOPT_FTPPORT	这个值将被用来获取供FTP"POST"指令所需要的IP地址。"POST"指令告诉远程服务器连接到我们指定的IP地址。这个字符串可以是纯文本的IP地址、主机名、一个网络接口名(UNIX下)或者只是一个'-'来使用默认的IP地址。	
CURLOPT_INTERFACE	网络发送接口名,可以是一个接口名、IP地址或者是一个主机名。	
CURLOPT_KRB4LEVEL	KRB4 (Kerberos 4) 安全级别。下面的任何值都是有效的(从低到高的顺序):"clear"、"safe"、"confidential"、"private".。如果字符串和这些都不匹配,将使用"private"。这个选项设置为NULL时将禁用KRB4 安全认证。目前KRB4 安全认证只能用于FTP传输。	

CURLOPT_POSTFIELDS	全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1&2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。
	
CURLOPT_PROXY	HTTP代理通道。	
CURLOPT_PROXYUSERPWD	一个用来连接到代理的"[username]:[password]"格式的字符串。	
CURLOPT_RANDOM_FILE	一个被用来生成SSL随机数种子的文件名。	
CURLOPT_RANGE	以"X-Y"的形式,其中X和Y都是可选项获取数据的范围,以字节计。HTTP传输线程也支持几个这样的重复项中间用逗号分隔如"X-Y,N-M"。	

CURLOPT_REFERER	在HTTP请求头中"Referer: "的内容。

CURLOPT_SSL_CIPHER_LIST	一个SSL的加密算法列表。例如RC4-SHA和TLSv1都是可用的加密列表。	
CURLOPT_SSLCERT	一个包含PEM格式证书的文件名。	
CURLOPT_SSLCERTPASSWD	使用CURLOPT_SSLCERT证书需要的密码。	
CURLOPT_SSLCERTTYPE	证书的类型。支持的格式有"PEM" (默认值), "DER"和"ENG"。	在cURL 7.9.3中被加入。
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_URL	需要获取的URL地址,也可以在curl_init()函数中设置。	

CURLOPT_USERAGENT	在HTTP请求中包含一个"User-Agent: "头的字符串。	

CURLOPT_USERPWD	传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"。


对于下面的这些option的可选参数,value应该被设置一个数组:
CURLOPT_HTTP200ALIASES	200响应码数组,数组中的响应吗被认为是正确的响应,否则被认为是错误的。	在cURL 7.10.3中被加入。

CURLOPT_HTTPHEADER	一个用来设置HTTP头字段的数组。使用如下的形式的数组进行设置: array('Content-type: text/plain', 'Content-length: 100')
	
CURLOPT_POSTQUOTE	在FTP请求执行完成后,在服务器上执行的一组FTP命令。	
CURLOPT_QUOTE	一组先于FTP请求的在服务器上执行的FTP命令。

对于下面的这些option的可选参数,value应该被设置一个流资源 (例如使用fopen()):

CURLOPT_FILE	设置输出文件的位置,值是一个资源类型,默认为STDOUT (浏览器)。

CURLOPT_INFILE	在上传文件的时候需要读取的文件地址,值是一个资源类型。

CURLOPT_STDERR	设置一个错误输出地址,值是一个资源类型,取代默认的STDERR。

CURLOPT_WRITEHEADER	设置header部分内容的写入的文件地址,值是一个资源类型。


对于下面的这些option的可选参数,value应该被设置为一个回调函数名:
CURLOPT_HEADERFUNCTION	设置一个回调函数,这个函数有两个参数,第一个是cURL的资源句柄,第二个是输出的header数据。header数据的输出必须依赖这个函数,返回已写入的数据大小。
CURLOPT_PASSWDFUNCTION	设置一个回调函数,有三个参数,第一个是cURL的资源句柄,第二个是一个密码提示符,第三个参数是密码长度允许的最大值。返回密码的值。
CURLOPT_PROGRESSFUNCTION	设置一个回调函数,有三个参数,第一个是cURL的资源句柄,第二个是一个文件描述符资源,第三个是长度。返回包含的数据。
CURLOPT_READFUNCTION	回调函数名。该函数应接受三个参数。第一个是 cURL resource;第二个是通过选项 CURLOPT_INFILE 传给 cURL 的 stream resource;第三个参数是最大可以读取的数据的数量。回 调函数必须返回一个字符串,长度小于或等于请求的数据量(第三个参数)。一般从传入的 stream resource 读取。返回空字符串作为 EOF(文件结束) 信号。
CURLOPT_WRITEFUNCTION	回调函数名。该函数应接受两个参数。第一个是 cURL resource;第二个是要写入的数据字符串。数 据必须在函数中被保存。函数必须返回准确的传入的要写入数据的字节数,否则传输会被一个错误所中断。

上传文件
<?php

/* http://localhost/upload.php:
print_r($_POST);
print_r($_FILES);
*/

$ch = curl_init();

$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');

curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//传递一个数组到CURLOPT_POSTFIELDS,cURL会把数据编码成 multipart/form-data,而然传递一个URL-encoded字符串时,数据会被编码成 application/x-www-form-urlencoded。

curl_exec($ch);
?>
输出:
Array
(
    [name] => Foo
)
Array
(
    [file] => Array
        (
            [name] => test.png
            [type] => image/png
            [tmp_name] => /tmp/phpcpjNeQ
            [error] => 0
            [size] => 279
        )

)



curl_setopt_array — 为cURL传输会话批量设置选项
bool curl_setopt_array ( resource $ch , array $options )
为cURL传输会话批量设置选项。这个函数对于需要设置大量的cURL选项是非常有用的,不需要重复地调用curl_setopt()。
如果全部的选项都被成功设置,返回TRUE。如果一个选项不能被成功设置,马上返回FALSE,忽略其后的任何在options数组中的选项。
<?php
// 创建一个新cURL资源
$ch = curl_init();

// 设置URL和相应的选项
$options = array(CURLOPT_URL => 'http://www.example.com/',
                 CURLOPT_HEADER => false
                );

curl_setopt_array($ch, $options);

// 抓取URL并把它传递给浏览器
curl_exec($ch);

// 关闭cURL资源,并且释放系统资源
curl_close($ch);
?>

curl_copy_handle — 复制一个cURL句柄和它的所有选项
resource curl_copy_handle ( resource $ch ) 
返回一个新的cURL句柄。

<?php
// 创建一个新的cURL资源
$ch = curl_init();

// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/');
curl_setopt($ch, CURLOPT_HEADER, 0);

// 复制句柄
$ch2 = curl_copy_handle($ch);

// 抓取URL (http://www.example.com/) 并把它传递给浏览器
curl_exec($ch2);

// 关闭cURL资源,并且释放系统资源
curl_close($ch2);
curl_close($ch);
?>


curl_errno — 返回最后一次的错误号
int curl_errno ( resource $ch )
返回错误号或 0 (零) 如果没有错误发生
<?php
// 创建一个指向一个不存在的位置的cURL句柄
$ch = curl_init('http://404.php.net/');

// 执行
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);

// 检查是否有错误发生
if(curl_errno($ch))
{
    echo 'Curl error: ' . curl_error($ch);
}

// 关闭句柄
curl_close($ch);
?>


curl_error — 返回一个保护当前会话最近一次错误的字符串
string curl_error ( resource $ch )
返回错误信息或 '' (空字符串) 如果没有任何错误发生。
<?php
// 创建一个指向一个不存在的位置的cURL句柄
$ch = curl_init('http://404.php.net/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

if(curl_exec($ch) === false)
{
    echo 'Curl error: ' . curl_error($ch);
}
else
{
    echo '操作完成没有任何错误';
}

// 关闭句柄
curl_close($ch);
?>

curl_escape — 使用 URL 编码给定的字符串
string curl_escape ( resource $ch , string $str )
返回编码后的字符串 或者在失败时返回 FALSE。
<?php
// 创建一个 curl 句柄
$ch = curl_init();

// 把编码后的字符串当做一个 GET 参数
$location = curl_escape($ch, 'Hofbräuhaus / München');
// 结果: Hofbr%C3%A4uhaus%20%2F%20M%C3%BCnchen

// 用编码好的字符串组装一个 URL
$url = "http://example.com/add_location.php?location={$location}";
// 结果: http://example.com/add_location.php?location=Hofbr%C3%A4uhaus%20%2F%20M%C3%BCnchen

// 发送 HTTP 请求并关闭句柄
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
?>


curl_unescape — 解码给定的 URL 编码的字符串
string curl_unescape ( resource $ch , string $str )
返回解码后的字符串 或者在失败时返回 FALSE。
<?php
// 创建一个 curl 句柄
$ch = curl_init('http://example.com/redirect.php');

// 发送 HTTP 请求并且遵循重定向
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($ch);

// 获取最后的有效 URL
$effective_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
// 结果: "http://example.com/show_location.php?loc=M%C3%BCnchen"

// 解码这个 URL
$effective_url_decoded = curl_unescape($ch, $effective_url);
// "http://example.com/show_location.php?loc=München"

// 关闭句柄
curl_close($ch);
?>


curl_exec — 执行一个cURL会话
mixed curl_exec ( resource $ch ) 这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。
成功时返回 TRUE, 或者在失败时返回 FALSE。 然而,如果 URLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE 。
<?php
// 创建一个cURL资源
$ch = curl_init();

// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);

// 抓取URL并把它传递给浏览器
curl_exec($ch);

// 关闭cURL资源,并且释放系统资源
curl_close($ch);
?>


curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄
int curl_multi_add_handle ( resource $mh , resource $ch )
mh 由 curl_multi_init() 返回的 cURL 多个句柄。
ch 由 curl_init() 返回的 cURL 句柄。
成功时返回0,失败时返回CURLM_XXX之一的错误码。
<?php
// 创建一对cURL资源
$ch1 = curl_init();
$ch2 = curl_init();

// 设置URL和相应的选项
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

// 创建批处理cURL句柄
$mh = curl_multi_init();

// 增加2个句柄
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$running=null;
// 执行批处理句柄
do {
    curl_multi_exec($mh,$running);
} while($running > 0);

// 关闭全部句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
?>


curl_multi_info_read — 获取当前解析的cURL的相关传输信息
array curl_multi_info_read ( resource $mh [, int &$msgs_in_queue = NULL ] )
查询批处理句柄是否单独的传输线程中有消息或信息返回。消息可能包含诸如从单独的传输线程返回的错误码或者只是传输线程有没有完成之类的报告。
重复调用这个函数,它每次都会返回一个新的结果,直到这时没有更多信息返回时,FALSE被当作一个信号返回。通过msgs_in_queue返回的整数指出将会包含当这次函数被调用后,还剩余的消息数。
返回的资源指向的数据调用curl_multi_remove_handle()后将不会存在。

mh 由 curl_multi_init() 返回的 cURL 多个句柄。
msgs_in_queue 仍在队列中的消息数量。

成功时返回相关信息的数组,失败时返回FALSE。
返回数组的内容
Key: Value:
msg    CURLMSG_DONE常量。其他返回值当前不可用。
result CURLE_*常量之一。如果一切操作没有问题,将会返回CURLE_OK常量。
handle cURL资源类型表明它有关的句柄。
<?php

$urls = array(
   "http://www.cnn.com/",
   "http://www.bbc.co.uk/",
   "http://www.yahoo.com/"
);

$mh = curl_multi_init();

foreach ($urls as $i => $url) {
    $conn[$i] = curl_init($url);
    curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
    curl_multi_add_handle($mh, $conn[$i]);
}

do {
    $status = curl_multi_exec($mh, $active);
    $info = curl_multi_info_read($mh);
    if (false !== $info) {
        var_dump($info);
    }
} while ($status === CURLM_CALL_MULTI_PERFORM || $active);

foreach ($urls as $i => $url) {
    $res[$i] = curl_multi_getcontent($conn[$i]);
    curl_close($conn[$i]);
}

var_dump(curl_multi_info_read($mh));

?>
输出:
array(3) {
  ["msg"]=>
  int(1)
  ["result"]=>
  int(0)
  ["handle"]=>
  resource(5) of type (curl)
}
array(3) {
  ["msg"]=>
  int(1)
  ["result"]=>
  int(0)
  ["handle"]=>
  resource(7) of type (curl)
}
array(3) {
  ["msg"]=>
  int(1)
  ["result"]=>
  int(0)
  ["handle"]=>
  resource(6) of type (curl)
}
bool(false)


curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源
int curl_multi_remove_handle ( resource $mh , resource $ch )
从给定的批处理句柄mh中移除ch句柄。当ch句柄被移除以后,仍然可以合法地用curl_exec()执行这个句柄。当正在移除的句柄正在被使用,在处理的过程中所有的传输任务会被终止。
成功时返回一个cURL句柄,失败时返回FALSE。
<?php 
$ch1 = curl_init(); 
curl_setopt($ch1, CURLOPT_URL, 'http://www.example.com/'); 
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true); 

$ch2 = curl_init(); 
curl_setopt($ch2, CURLOPT_URL, 'http://www.example.net/'); 
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true); 

$mh = curl_multi_init(); 

curl_multi_add_handle($mh, $ch1); 
curl_multi_add_handle($mh, $ch2); 

$active = null; 

do { 
curl_multi_exec($mh, $active); 
} 
while($active); 

$res1 = curl_multi_getcontent($ch1); 
$res2 = curl_multi_getcontent($ch2); 

curl_multi_remove_handle($mh, $ch1); 
curl_multi_remove_handle($mh, $ch2); 

curl_multi_close($mh); 

curl_close($ch1); 
curl_close($ch2); 
?>


curl_reset — 重置所有选项的libcurl的会话句柄
void curl_reset ( resource $ch )
没有返回值。
<?php
// Create a curl handle
$ch = curl_init();

// Set CURLOPT_USERAGENT option
curl_setopt($ch, CURLOPT_USERAGENT, "My test user-agent");

// Reset all previously set options
curl_reset($ch);

// Send HTTP request
curl_setopt($ch, CURLOPT_URL, 'http://example.com/');
curl_exec($ch); // the previously set user-agent will be not sent, it has been reset by curl_reset

// Close the handle
curl_close($ch);
?>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值