php中curl的应用

php高级应用 专栏收录该内容
24 篇文章 0 订阅

cURL可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET,DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些:HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上传文件断点续传,http代理服务器管道,甚至它还支持IPv6,scoket5代理服务器,通过http代理服务器上传文件到FTP服务器等等。

使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库。

1、PHP建立CURL请求的基本步骤

①:初始化

curl_init()

②:设置属性

curl_setopt().有一长串cURL参数可供设置,它们能指定URL请求的各个细节。

③:执行并获取结果

curl_exec()

④:释放句柄

curl_close()

2、实例:

php curl 发送get请求:

[php] view plain copy

  1. //初始化  
  2. $curl = curl_init();  
  3. //设置抓取的url  
  4. curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');  
  5. //设置头文件的信息作为数据流输出  
  6. curl_setopt($curl, CURLOPT_HEADER, 1);  
  7. //设置获取的信息以文件流的形式返回,而不是直接输出。  
  8. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
  9. //执行命令  
  10. $data = curl_exec($curl);  
  11. echo curl_getinfo($curl,CURLINFO_HTTP_CODE); //输出请求状态码  
  12. //关闭URL请求  
  13. curl_close($curl);  
  14. //显示获得的数据  
  15. print_r($data);  

php curl 发送post请求:

[php] view plain copy

  1. //初始化  
  2. $curl = curl_init();  
  3. //设置抓取的url  
  4. curl_setopt($curl, CURLOPT_URL, 'http://localhost/test/test.php');  
  5. //设置头文件的信息作为数据流输出  
  6. curl_setopt($curl, CURLOPT_HEADER, 1);  
  7. //设置获取的信息以文件流的形式返回,而不是直接输出。  
  8. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
  9. //设置post方式提交  
  10. curl_setopt($curl, CURLOPT_POST, 1);  
  11. //设置post数据  
  12. $post_data = array(  
  13.     "title" => "1290800466",  
  14.     "content" => "3424243243"  
  15. );  
  16. //post提交的数据  
  17. curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);  
  18. //执行命令  
  19. $data = curl_exec($curl);  
  20. //关闭URL请求  
  21. curl_close($curl);  
  22. //显示获得的数据  
  23. print_r($data);   

 


test.php:

[php] view plain copy

  1. <?php  
  2. $title = $_REQUEST['title'];  
  3. $content = $_REQUEST['content'];  
  4. error_log($title."\n",3,'error.log');  
  5. error_log($content."\n",3,'error.log');  
  6. echo 'ok';  

3、PHP cURL 函数:

以下包含了PHP cURL函数列表:

函数

描述

curl_close()

关闭一个cURL会话。

curl_copy_handle()

复制一个cURL句柄和它的所有选项。

curl_errno()

返回最后一次的错误号。

curl_error()

返回一个保护当前会话最近一次错误的字符串。

curl_escape()

返回转义字符串,对给定的字符串进行URL编码。

curl_exec()

执行一个cURL会话。

curl_file_create()

创建一个 CURLFile 对象。

curl_getinfo()

获取一个cURL连接资源句柄的信息。

curl_init()

初始化一个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_pause()

暂停及恢复连接。

curl_reset()

重置libcurl的会话句柄的所有选项。

curl_setopt_array()

cURL传输会话批量设置选项。

curl_setopt()

设置一个cURL传输选项。

curl_share_close()

关闭cURL共享句柄。

curl_share_init()

初始化cURL共享句柄。

curl_share_setopt()

设置一个共享句柄的cURL传输选项。

curl_strerror()

返回错误代码的字符串描述。

curl_unescape()

解码URL编码后的字符串。

curl_version()

获取cURL版本信息。

4、curl_setopt函数参数介绍:

boolcurl_setopt( resource $ch,int$option, mixed $value)

参数说明:
ch             curl_init() 返回的 cURL 句柄。
option     需要设置的CURLOPT_XXX选项。
value       将设置在option选项上的值。

对于下面的这些option的可选参数,value应该被设置一个bool类型的值:

选项

可选value

备注

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状态码,默认行为是忽略编号小于等于400HTTP信息。

 

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时禁用EPRTLPRT,使用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

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

PHP 5.1.3 开始可用。CURLINFO_前缀是故意的(intentional)

CURLOPT_HTTPGET

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

 

CURLOPT_HTTPPROXYTUNNEL

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

 

CURLOPT_MUTE

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

 

CURLOPT_NETRC

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

 

CURLOPT_NOBODY

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

 

CURLOPT_NOPROGRESS

启用时关闭curl传输的进度条,此项的默认设置为启用。

Note:

PHP自动地设置这个选项为TRUE,这个选项仅仅应当在以调试为目的时被改变。

 

CURLOPT_NOSIGNAL

启用时忽略所有的curl传递给php进行的信号。在SAPI多线程传输时此项被默认启用。

cURL 7.10时被加入。

CURLOPT_POST

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

 

CURLOPT_PUT

启用时允许HTTP发送文件,必须同时设置CURLOPT_INFILECURLOPT_INFILESIZE

 

CURLOPT_RETURNTRANSFER

curl_exec()获取的信息以文件流的形式返回,而不是直接输出。

 

CURLOPT_SSL_VERIFYPEER

禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE

cURL 7.10开始默认为TRUE。从cURL 7.10开始默认绑定安装。

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类型的值:

选项

可选value

备注

CURLOPT_BUFFERSIZE

每次获取的数据中读入缓存的大小,但是不保证这个值每次都会被填满。

cURL 7.10中被加入。

CURLOPT_CLOSEPOLICY

不是CURLCLOSEPOLICY_LEAST_RECENTLY_USED就是CURLCLOSEPOLICY_OLDEST,还存在另外三个CURLCLOSEPOLICY,但是cURL暂时还不支持。

 

CURLOPT_CONNECTTIMEOUT

在发起连接前等待的时间,如果设置为0,则无限等待。

 

CURLOPT_CONNECTTIMEOUT_MS

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

cURL 7.16.2中被加入。从PHP 5.2.3开始可用。

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_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_HTTPCURLPROTO_HTTPSCURLPROTO_FTPCURLPROTO_FTPSCURLPROTO_SCPCURLPROTO_SFTPCURLPROTO_TELNETCURLPROTO_LDAPCURLPROTO_LDAPSCURLPROTO_DICTCURLPROTO_FILECURLPROTO_TFTPCURLPROTO_ALL

cURL 7.19.4中被加入。

CURLOPT_PROTOCOLS

CURLPROTO_*的位域指。如果被启用,位域值会限定libcurl在传输过程中有哪些可使用的协议。这将允许你在编译libcurl时支持众多协议,但是限制只是用它们中被允许使用的一个子集。默认libcurl将会使用全部它支持的协议。参见CURLOPT_REDIR_PROTOCOLS.可用的协议选项为:CURLPROTO_HTTPCURLPROTO_HTTPSCURLPROTO_FTPCURLPROTO_FTPSCURLPROTO_SCPCURLPROTO_SFTPCURLPROTO_TELNETCURLPROTO_LDAPCURLPROTO_LDAPSCURLPROTO_DICTCURLPROTO_FILECURLPROTO_TFTPCURLPROTO_ALL

cURL 7.19.4中被加入。

CURLOPT_PROXYAUTH

HTTP代理连接的验证方式。使用在CURLOPT_HTTPAUTH中的位域标志来设置相应选项。对于代理验证只有CURLAUTH_BASICCURLAUTH_NTLM当前被支持。

cURL 7.10.7中被加入。

CURLOPT_PROXYPORT

代理服务器的端口。端口也可以在CURLOPT_PROXY中进行设置。

 

CURLOPT_PROXYTYPE

不是CURLPROXY_HTTP (默认值) 就是CURLPROXY_SOCKS5

cURL 7.10中被加入。

CURLOPT_REDIR_PROTOCOLS

CURLPROTO_*中的位域值。如果被启用,位域值将会限制传输线程在CURLOPT_FOLLOWLOCATION开启时跟随某个重定向时可使用的协议。这将使你对重定向时限制传输线程使用被允许的协议子集默认libcurl将会允许除FILESCP之外的全部协议。这个和7.19.4预发布版本种无条件地跟随所有支持的协议有一些不同。关于协议常量,请参照CURLOPT_PROTOCOLS

cURL 7.19.4中被加入。

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_HEADERtrue,则返回一个"304 Not Modified"headerCURLOPT_HEADERfalse,则使用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类型的值:

选项

可选value

备注

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"是不正确的。

Note:

在确定服务器支持这个自定义请求的方法前不要使用。

 

CURLOPT_EGDSOCKET

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

 

CURLOPT_ENCODING

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

cURL 7.10中被加入。

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&para2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data

 

CURLOPT_PROXY

HTTP代理通道。

 

CURLOPT_PROXYUSERPWD

一个用来连接到代理的"[username]:[password]"格式的字符串。

 

CURLOPT_RANDOM_FILE

一个被用来生成SSL随机数种子的文件名。

 

CURLOPT_RANGE

"X-Y"的形式,其中XY都是可选项获取数据的范围,以字节计。HTTP传输线程也支持几个这样的重复项中间用逗号分隔如"X-Y,N-M"

 

CURLOPT_REFERER

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

 

CURLOPT_SSL_CIPHER_LIST

一个SSL的加密算法列表。例如RC4-SHATLSv1都是可用的加密列表。

 

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私钥的密码。

Note:

由于这个选项包含了敏感的密码信息,记得保证这个PHP脚本的安全。

 

CURLOPT_SSLKEYTYPE

CURLOPT_SSLKEY中规定的私钥的加密类型,支持的密钥类型为"PEM"(默认值)"DER""ENG"

 

CURLOPT_URL

需要获取的URL地址,也可以在curl_init()函数中设置。

 

CURLOPT_USERAGENT

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

 

CURLOPT_USERPWD

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

 

对于下面的这些option的可选参数,value应该被设置一个数组:

选项

可选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()):

选项

可选value

CURLOPT_FILE

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

CURLOPT_INFILE

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

CURLOPT_STDERR

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

CURLOPT_WRITEHEADER

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

对于下面的这些option的可选参数,value应该被设置为一个回调函数名:

选项

可选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;第二个是要写入的数据字符串。数据必须在函数中被保存。函数必须返回准确的传入的要写入数据的字节数,否则传输会被一个错误所中断。


返回值

成功时返回 TRUE或者在失败时返回 FALSE

 

一些状态代码

1xx:请求收到,继续处理  
2xx
:操作成功收到,分析、接受  
3xx
:完成此请求必须进一步处理  
4xx
:请求包含一个错误语法或不能完成  
5xx
:服务器执行一个完全有效请求失败 

100——客户必须继续发出请求  
101——
客户要求服务器根据请求转换HTTP协议版本 

200——交易成功  
201——
提示知道新文件的URL  
202——
接受和处理、但处理未完成  
203——
返回信息不确定或不完整  
204——
请求收到,但返回信息为空  
205——
服务器完成了请求,用户代理必须复位当前已经浏览过的文件  
206——
服务器已经完成了部分用户的GET请求 

300——请求的资源可在多处得到  
301——
删除请求数据  
302——
在其他地址发现了请求数据  
303——
建议客户访问其他URL或访问方式  
304——
客户端已经执行了GET,但文件未变化  
305——
请求的资源必须从服务器指定的地址得到  
306——
前一版本HTTP中使用的代码,现行版本中不再使用  
307——
申明请求的资源临时性删除 

400——错误请求,如语法错误  
401——
请求授权失败  
402——
保留有效ChargeTo头响应  
403——
请求不允许  
404——
没有发现文件、查询或URl  
405——
用户在Request-Line字段定义的方法不允许  
406——
根据用户发送的Accept拖,请求资源不可访问  
407——
类似401,用户必须首先在代理服务器上得到授权  
408——
客户端没有在用户指定的饿时间内完成请求  
409——
对当前资源状态,请求不能完成  
410——
服务器上不再有此资源且无进一步的参考地址  
411——
服务器拒绝用户定义的Content-Length属性请求  
412——
一个或多个请求头字段在当前请求中错误  
413——
请求的资源大于服务器允许的大小  
414——
请求的资源URL长于服务器允许的长度  
415——
请求资源不支持请求项目格式  
416——
请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求  
也不包含If-Range请求头字段  
417——
服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求 

500——服务器产生内部错误  
501——
服务器不支持请求的函数  
502——
服务器暂时不可用,有时是为了防止发生系统过载  
503——
服务器过载或暂停维修  
504——
关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长  
505——
服务器不支持或拒绝支请求头中指定的HTTP版本 

cURL可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET,DICT, FILE 以及 LDAP等协议都可以很好的支持,包括一些:HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,keyberos认证,HTTP上传,代理服务器,cookies,用户名/密码认证,下载文件断点续传,上传文件断点续传,http代理服务器管道,甚至它还支持IPv6,scoket5代理服务器,通过http代理服务器上传文件到FTP服务器等等。

使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库。

1、PHP建立CURL请求的基本步骤

①:初始化

curl_init()

②:设置属性

curl_setopt().有一长串cURL参数可供设置,它们能指定URL请求的各个细节。

③:执行并获取结果

curl_exec()

④:释放句柄

curl_close()

2、实例:

php curl 发送get请求:

[php] view plain copy

  1. //初始化  
  2. $curl = curl_init();  
  3. //设置抓取的url  
  4. curl_setopt($curl, CURLOPT_URL, 'http://www.baidu.com');  
  5. //设置头文件的信息作为数据流输出  
  6. curl_setopt($curl, CURLOPT_HEADER, 1);  
  7. //设置获取的信息以文件流的形式返回,而不是直接输出。  
  8. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
  9. //执行命令  
  10. $data = curl_exec($curl);  
  11. echo curl_getinfo($curl,CURLINFO_HTTP_CODE); //输出请求状态码  
  12. //关闭URL请求  
  13. curl_close($curl);  
  14. //显示获得的数据  
  15. print_r($data);  

php curl 发送post请求:

[php] view plain copy

  1. //初始化  
  2. $curl = curl_init();  
  3. //设置抓取的url  
  4. curl_setopt($curl, CURLOPT_URL, 'http://localhost/test/test.php');  
  5. //设置头文件的信息作为数据流输出  
  6. curl_setopt($curl, CURLOPT_HEADER, 1);  
  7. //设置获取的信息以文件流的形式返回,而不是直接输出。  
  8. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
  9. //设置post方式提交  
  10. curl_setopt($curl, CURLOPT_POST, 1);  
  11. //设置post数据  
  12. $post_data = array(  
  13.     "title" => "1290800466",  
  14.     "content" => "3424243243"  
  15. );  
  16. //post提交的数据  
  17. curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);  
  18. //执行命令  
  19. $data = curl_exec($curl);  
  20. //关闭URL请求  
  21. curl_close($curl);  
  22. //显示获得的数据  
  23. print_r($data);   

 


test.php:

[php] view plain copy

  1. <?php  
  2. $title = $_REQUEST['title'];  
  3. $content = $_REQUEST['content'];  
  4. error_log($title."\n",3,'error.log');  
  5. error_log($content."\n",3,'error.log');  
  6. echo 'ok';  

3、PHP cURL 函数:

以下包含了PHP cURL函数列表:

函数

描述

curl_close()

关闭一个cURL会话。

curl_copy_handle()

复制一个cURL句柄和它的所有选项。

curl_errno()

返回最后一次的错误号。

curl_error()

返回一个保护当前会话最近一次错误的字符串。

curl_escape()

返回转义字符串,对给定的字符串进行URL编码。

curl_exec()

执行一个cURL会话。

curl_file_create()

创建一个 CURLFile 对象。

curl_getinfo()

获取一个cURL连接资源句柄的信息。

curl_init()

初始化一个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_pause()

暂停及恢复连接。

curl_reset()

重置libcurl的会话句柄的所有选项。

curl_setopt_array()

cURL传输会话批量设置选项。

curl_setopt()

设置一个cURL传输选项。

curl_share_close()

关闭cURL共享句柄。

curl_share_init()

初始化cURL共享句柄。

curl_share_setopt()

设置一个共享句柄的cURL传输选项。

curl_strerror()

返回错误代码的字符串描述。

curl_unescape()

解码URL编码后的字符串。

curl_version()

获取cURL版本信息。

4、curl_setopt函数参数介绍:

boolcurl_setopt( resource $ch,int$option, mixed $value)

参数说明:
ch             curl_init() 返回的 cURL 句柄。
option     需要设置的CURLOPT_XXX选项。
value       将设置在option选项上的值。

对于下面的这些option的可选参数,value应该被设置一个bool类型的值:

选项

可选value

备注

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状态码,默认行为是忽略编号小于等于400HTTP信息。

 

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时禁用EPRTLPRT,使用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

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

PHP 5.1.3 开始可用。CURLINFO_前缀是故意的(intentional)

CURLOPT_HTTPGET

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

 

CURLOPT_HTTPPROXYTUNNEL

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

 

CURLOPT_MUTE

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

 

CURLOPT_NETRC

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

 

CURLOPT_NOBODY

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

 

CURLOPT_NOPROGRESS

启用时关闭curl传输的进度条,此项的默认设置为启用。

Note:

PHP自动地设置这个选项为TRUE,这个选项仅仅应当在以调试为目的时被改变。

 

CURLOPT_NOSIGNAL

启用时忽略所有的curl传递给php进行的信号。在SAPI多线程传输时此项被默认启用。

cURL 7.10时被加入。

CURLOPT_POST

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

 

CURLOPT_PUT

启用时允许HTTP发送文件,必须同时设置CURLOPT_INFILECURLOPT_INFILESIZE

 

CURLOPT_RETURNTRANSFER

curl_exec()获取的信息以文件流的形式返回,而不是直接输出。

 

CURLOPT_SSL_VERIFYPEER

禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE

cURL 7.10开始默认为TRUE。从cURL 7.10开始默认绑定安装。

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类型的值:

选项

可选value

备注

CURLOPT_BUFFERSIZE

每次获取的数据中读入缓存的大小,但是不保证这个值每次都会被填满。

cURL 7.10中被加入。

CURLOPT_CLOSEPOLICY

不是CURLCLOSEPOLICY_LEAST_RECENTLY_USED就是CURLCLOSEPOLICY_OLDEST,还存在另外三个CURLCLOSEPOLICY,但是cURL暂时还不支持。

 

CURLOPT_CONNECTTIMEOUT

在发起连接前等待的时间,如果设置为0,则无限等待。

 

CURLOPT_CONNECTTIMEOUT_MS

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

cURL 7.16.2中被加入。从PHP 5.2.3开始可用。

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_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_HTTPCURLPROTO_HTTPSCURLPROTO_FTPCURLPROTO_FTPSCURLPROTO_SCPCURLPROTO_SFTPCURLPROTO_TELNETCURLPROTO_LDAPCURLPROTO_LDAPSCURLPROTO_DICTCURLPROTO_FILECURLPROTO_TFTPCURLPROTO_ALL

cURL 7.19.4中被加入。

CURLOPT_PROTOCOLS

CURLPROTO_*的位域指。如果被启用,位域值会限定libcurl在传输过程中有哪些可使用的协议。这将允许你在编译libcurl时支持众多协议,但是限制只是用它们中被允许使用的一个子集。默认libcurl将会使用全部它支持的协议。参见CURLOPT_REDIR_PROTOCOLS.可用的协议选项为:CURLPROTO_HTTPCURLPROTO_HTTPSCURLPROTO_FTPCURLPROTO_FTPSCURLPROTO_SCPCURLPROTO_SFTPCURLPROTO_TELNETCURLPROTO_LDAPCURLPROTO_LDAPSCURLPROTO_DICTCURLPROTO_FILECURLPROTO_TFTPCURLPROTO_ALL

cURL 7.19.4中被加入。

CURLOPT_PROXYAUTH

HTTP代理连接的验证方式。使用在CURLOPT_HTTPAUTH中的位域标志来设置相应选项。对于代理验证只有CURLAUTH_BASICCURLAUTH_NTLM当前被支持。

cURL 7.10.7中被加入。

CURLOPT_PROXYPORT

代理服务器的端口。端口也可以在CURLOPT_PROXY中进行设置。

 

CURLOPT_PROXYTYPE

不是CURLPROXY_HTTP (默认值) 就是CURLPROXY_SOCKS5

cURL 7.10中被加入。

CURLOPT_REDIR_PROTOCOLS

CURLPROTO_*中的位域值。如果被启用,位域值将会限制传输线程在CURLOPT_FOLLOWLOCATION开启时跟随某个重定向时可使用的协议。这将使你对重定向时限制传输线程使用被允许的协议子集默认libcurl将会允许除FILESCP之外的全部协议。这个和7.19.4预发布版本种无条件地跟随所有支持的协议有一些不同。关于协议常量,请参照CURLOPT_PROTOCOLS

cURL 7.19.4中被加入。

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_HEADERtrue,则返回一个"304 Not Modified"headerCURLOPT_HEADERfalse,则使用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类型的值:

选项

可选value

备注

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"是不正确的。

Note:

在确定服务器支持这个自定义请求的方法前不要使用。

 

CURLOPT_EGDSOCKET

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

 

CURLOPT_ENCODING

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

cURL 7.10中被加入。

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&para2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data

 

CURLOPT_PROXY

HTTP代理通道。

 

CURLOPT_PROXYUSERPWD

一个用来连接到代理的"[username]:[password]"格式的字符串。

 

CURLOPT_RANDOM_FILE

一个被用来生成SSL随机数种子的文件名。

 

CURLOPT_RANGE

"X-Y"的形式,其中XY都是可选项获取数据的范围,以字节计。HTTP传输线程也支持几个这样的重复项中间用逗号分隔如"X-Y,N-M"

 

CURLOPT_REFERER

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

 

CURLOPT_SSL_CIPHER_LIST

一个SSL的加密算法列表。例如RC4-SHATLSv1都是可用的加密列表。

 

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私钥的密码。

Note:

由于这个选项包含了敏感的密码信息,记得保证这个PHP脚本的安全。

 

CURLOPT_SSLKEYTYPE

CURLOPT_SSLKEY中规定的私钥的加密类型,支持的密钥类型为"PEM"(默认值)"DER""ENG"

 

CURLOPT_URL

需要获取的URL地址,也可以在curl_init()函数中设置。

 

CURLOPT_USERAGENT

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

 

CURLOPT_USERPWD

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

 

对于下面的这些option的可选参数,value应该被设置一个数组:

选项

可选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()):

选项

可选value

CURLOPT_FILE

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

CURLOPT_INFILE

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

CURLOPT_STDERR

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

CURLOPT_WRITEHEADER

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

对于下面的这些option的可选参数,value应该被设置为一个回调函数名:

选项

可选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;第二个是要写入的数据字符串。数据必须在函数中被保存。函数必须返回准确的传入的要写入数据的字节数,否则传输会被一个错误所中断。


返回值

成功时返回 TRUE或者在失败时返回 FALSE

 

一些状态代码

1xx:请求收到,继续处理  
2xx
:操作成功收到,分析、接受  
3xx
:完成此请求必须进一步处理  
4xx
:请求包含一个错误语法或不能完成  
5xx
:服务器执行一个完全有效请求失败 

100——客户必须继续发出请求  
101——
客户要求服务器根据请求转换HTTP协议版本 

200——交易成功  
201——
提示知道新文件的URL  
202——
接受和处理、但处理未完成  
203——
返回信息不确定或不完整  
204——
请求收到,但返回信息为空  
205——
服务器完成了请求,用户代理必须复位当前已经浏览过的文件  
206——
服务器已经完成了部分用户的GET请求 

300——请求的资源可在多处得到  
301——
删除请求数据  
302——
在其他地址发现了请求数据  
303——
建议客户访问其他URL或访问方式  
304——
客户端已经执行了GET,但文件未变化  
305——
请求的资源必须从服务器指定的地址得到  
306——
前一版本HTTP中使用的代码,现行版本中不再使用  
307——
申明请求的资源临时性删除 

400——错误请求,如语法错误  
401——
请求授权失败  
402——
保留有效ChargeTo头响应  
403——
请求不允许  
404——
没有发现文件、查询或URl  
405——
用户在Request-Line字段定义的方法不允许  
406——
根据用户发送的Accept拖,请求资源不可访问  
407——
类似401,用户必须首先在代理服务器上得到授权  
408——
客户端没有在用户指定的饿时间内完成请求  
409——
对当前资源状态,请求不能完成  
410——
服务器上不再有此资源且无进一步的参考地址  
411——
服务器拒绝用户定义的Content-Length属性请求  
412——
一个或多个请求头字段在当前请求中错误  
413——
请求的资源大于服务器允许的大小  
414——
请求的资源URL长于服务器允许的长度  
415——
请求资源不支持请求项目格式  
416——
请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求  
也不包含If-Range请求头字段  
417——
服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求 

500——服务器产生内部错误  
501——
服务器不支持请求的函数  
502——
服务器暂时不可用,有时是为了防止发生系统过载  
503——
服务器过载或暂停维修  
504——
关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长  
505——
服务器不支持或拒绝支请求头中指定的HTTP版本 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值