首页 > 房地产知识干货

curl_exec curl_setopt

php curl的几种用法

总结一下项目中用到curl的几种方式

1. php curl的默认调用方法,get方式访问url$ch= curl_init();

curl_setopt($ch, CURLOPT_HTTPHEADER,$header);//设置http头

curl_setopt($ch, CURLOPT_ENCODING,”gzip”);//设置为客户端支持gzip压缩

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);//设置连接等待时间

curl_setopt($ch, CURLOPT_URL,$url);

curl_exec($ch);

if($error= curl_error($ch)){//出错处理return-1;}fclose($fp);$curl_code= curl_getinfo($ch, CURLINFO_HTTP_CODE);//获取http返回值

if($curl_code== 200){//正常访问url}//异常

2.设置http header支持curl访问lighttpd服务器J*a代码$header[]='Expect:';$header[]='Expect:';

3.设置curl,只获取http header,不获取body:J*a代码curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch, CURLOPT_NOBODY, 1);

curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch, CURLOPT_NOBODY, 1);或者只获取body:J*a代码curl_setopt($ch, CURLOPT_HEADER, 0);// make sure we get the body

curl_setopt($ch, CURLOPT_NOBODY, 0);

curl_setopt($ch, CURLOPT_HEADER, 0);// make sure we get the body

curl_setopt($ch, CURLOPT_NOBODY, 0);

4.访问虚拟主机,需设置Host$header[]='Host:'.$host;

5.使用post, put, delete等REStful方式访问urlpost:curl_setopt($ch, CURLOPT_POST, 1);

put, delete:

curl_setopt($ch, CURLOPT_CUSTOMREQUEST,”DELETE”);//或者PUT,需要服务器支持这些方法。6.保存下载内容为文件

php curl选项列表(超详细)

本篇文章是对php中的curl选项列表进行了详细的分析介绍需要的朋友参考下

第一类对于下面的这些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状态码默认行为是忽略编号小于等于的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启用时追踪句柄的请求字符串从 PHP开始可用 CURLINFO_前缀是故意的(intentional) CURLOPT_HTTPGET启用时会设置HTTP的method为GET因为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时被加入 CURLOPT_POST启用时会发送一个常规的POST请求类型为 application/x form urlencoded就像表单提交的一样 CURLOPT_PUT启用时允许HTTP发送文件必须同时设置CURLOPT_INFILE和CURLOPT_INFILESIZE CURLOPT_RETURNTRANSFER将 curl_exec()获取的信息以文件流的形式返回而不是直接输出 CURLOPT_SSL_VERIFYPEER禁用后cURL将终止从服务端进行验证使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录如果CURLOPT_SSL_VERIFYPEER(默认值为)被启用 CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为 FALSE自cURL开始默认为TRUE从cURL开始默认绑定安装 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中被加入 CURLOPT_CLOSEPOLICY不是CURLCLOSEPOLICY_LEAST_RECENTLY_USED就是CURLCLOSEPOLICY_OLDEST还存在另外三个CURLCLOSEPOLICY_但是cURL暂时还不支持 CURLOPT_CONNECTTIMEOUT在发起连接前等待的时间如果设置为则无限等待 CURLOPT_CONNECTTIMEOUT_MS尝试连接等待的时间以毫秒为单位如果设置为则无限等待在cURL中被加入从PHP开始可用 CURLOPT_DNS_CACHE_TIMEOUT设置在内存中保存DNS信息的时间默认为秒 CURLOPT_FTPSSLAUTH FTP验证方式 CURLFTPAUTH_SSL(首先尝试SSL) CURLFTPAUTH_TLS(首先尝试TLS)或CURLFTPAUTH_DEFAULT(让cURL自动决定)在cURL中被加入 CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE(默认值让cURL自己判断使用哪个版本) CURL_HTTP_VERSION_ _(强制使用 HTTP/)或CURL_HTTP_VERSION_ _(强制使用 HTTP/) 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在cURL中被加入 CURLOPT_PROXYAUTH HTTP代理连接的验证方式使用在CURLOPT_HTTPAUTH中的位域标志来设置相应选项对于代理验证只有CURLAUTH_BASIC和CURLAUTH_NTLM当前被支持在cURL中被加入 CURLOPT_PROXYPORT代理服务器的端口端口也可以在CURLOPT_PROXY中进行设置 CURLOPT_PROXYTYPE不是CURLPROXY_HTTP(默认值)就是CURLPROXY_SOCKS在cURL中被加入 CURLOPT_REDIR_PROTOCOLS CURLPROTO_*中的位域值如果被启用位域值将会限制传输线程在CURLOPT_FOLLOWLOCATION开启时跟随某个重定向时可使用的协议这将使你对重定向时限制传输线程使用被允许的协议子集默认libcurl将会允许除FILE和SCP之外的全部协议这个和预发布版本种无条件地跟随所有支持的协议有一些不同关于协议常量请参照CURLOPT_PROTOCOLS在cURL中被加入 CURLOPT_RESUME_FROM在恢复传输时传递一个字节偏移量(用来断点续传) CURLOPT_SSL_VERIFYHOST检查服务器SSL证书中是否存在一个公用名(mon name)译者注公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名(domain)或子域名(sub domain)检查公用名是否存在并且是否与提供的主机名匹配 CURLOPT_SSLVERSION使用的SSL版本(或)默认情况下PHP会自己检测这个值尽管有些情况下需要手动地进行设置 CURLOPT_TIMECONDITION如果在CURLOPT_TIMEVALUE指定的某个时间以后被编辑过则使用CURL_TIMECOND_IFMODSINCE返回页面如果没有被修改过并且CURLOPT_HEADER为true则返回一个” Not Modified”的header CURLOPT_HEADER为false则使用CURL_TIMECOND_IFUNMODSINCE默认值为 CURL_TIMECOND_IFUNMODSINCE CURLOPT_TIMEOUT设置cURL允许执行的最长秒数 CURLOPT_TIMEOUT_MS设置cURL允许执行的最长毫秒数在cURL中被加入从PHP起可使用 CURLOPT_TIMEVALUE设置一个CURLOPT_TIMECONDITION使用的时间戳在默认状态下使用的是CURL_TIMECOND_IFMODSINCE第三类对于下面的这些option的可选参数 value应该被设置一个string类型的值选项可选value值备注 CURLOPT_CAINFO一个保存著个或多个用来让服务端验证的证书的文件名这个参数仅仅在和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 HTTP/ rnrn”是不正确的 Note:在确定服务器支持这个自定义请求的方法前不要使用 CURLOPT_EGDSOCKET类似CURLOPT_RANDOM_FILE除了一个Entropy Gathering Daemon套接字 CURLOPT_ENCODING HTTP请求头中”Accept Encoding:”的值支持的编码有”identity””deflate”和”gzip”如果为空字符串””请求头会发送所有支持的编码类型在cURL中被加入 CURLOPT_FTPPORT这个值将被用来获取供FTP”POST”指令所需要的IP地址”POST”指令告诉远程服务器连接到我们指定的IP地址这个字符串可以是纯文本的IP地址主机名一个网络接口名(UNIX下)或者只是一个来使用默认的IP地址 CURLOPT_INTERFACE网络发送接口名可以是一个接口名 IP地址或者是一个主机名 CURLOPT_KRB LEVEL KRB(Kerberos)安全级别下面的任何值都是有效的(从低到高的顺序)”clear””safe””confidential””private”如果字符串和这些都不匹配将使用”private”这个选项设置为NULL时将禁用KRB安全认证目前KRB安全认证只能用于FTP传输 CURLOPT_POSTFIELDS全部数据使用HTTP协议中的”POST”*作来发送要发送文件在文件名前面加上@前缀并使用完整路径这个参数可以通过urlencoded后的字符串类似 para=val¶=val&或使用一个以字段名为键值字段数据为值的数组如果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的加密算法列表例如RC SHA和TLSv都是可用的加密列表 CURLOPT_SSLCERT一个包含PEM格式证书的文件名 CURLOPT_SSLCERTPASSWD使用CURLOPT_SSLCERT证书需要的密码 CURLOPT_SSLCERTTYPE证书的类型支持的格式有”PEM”(默认值)”DER”和”ENG”在cURL中被加入 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_HTTP ALIASES响应码数组数组中的响应吗被认为是正确的响应否则被认为是错误的在cURL中被加入 CURLOPT_HTTPHEADER一个用来设置HTTP头字段的数组使用如下的形式的数组进行设置 array( Content type: text/plain Content length:) CURLOPT_POSTQUOTE在FTP请求执行完成后在服务器上执行的一组FTP命令 CURLOPT_QUOTE一组先于FTP请求的在服务器上执行的FTP命令

lishixinzhi/Article/program/PHP/201311/21090

PHP中的curl_exec

curl_exec

(PHP 4>= 4.0.2, PHP 5) curl_exec—执行一个cURL会话

可以参考官方网站范例:

你要用CURL,就跟Session一样,要先初始化 curl_init(),不然PHP部会知道该怎麼运作。初始化完成之後就要开始设定参数,就像是要不要显示出来。当你参数设定完毕,就要开始执行这个CURL。最後就要关闭这个CURL。这就算是一个简单的CURL运用,当然还有更多变化。

实际例子:

<?php

//创建一个cURL资源

$ch=curl_init();

//设置URL和相应的选项

curl_setopt($ch,CURLOPT_URL,”

);

curl_setopt($ch,CURLOPT_HEADER,0);

//抓取URL并把它传递给浏览器

curl_exec($ch);

//关闭cURL资源,并且释放系统资源

curl_close($ch);

?>

如使用mysql一样,首先,我们必须先建立一个「curl」的连线,也因此,必须使用到 curl_init()这个函式。而为了怕建立连线忘了关闭。因此,必须先写好关闭的函式,curl_close($ch)。

不过大部分HTML标签都可以抓下来,并且显示,可是有部分可能与资料加密性或是转址的部分,就无法正常显示。

/建立CURL连线

$ch=curl_init();

//设定撷取的URL网址

curl_setopt($ch,CURLOPT_URL,”

);

curl_setopt($ch,CURLOPT_HEADER,false);

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

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

//执行

$temp=curl_exec($ch);

//关闭CURL连线

curl_close($ch)

加上curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);之後,他会将curl_exec()获取的讯息以文件流的形式返回传给$temp,而不是直接输出。如果要显示出画面的话就加上 echo$temp;就可以了。

下面先分享一个比较常用的,传递参数的部分。

简易的使用语法(GET):

//建立CURL连线

$ch=curl_init();

//设定撷取的URL网址

curl_setopt($ch,CURLOPT_URL,”

);

curl_setopt($ch,CURLOPT_HEADER,false);

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

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

//执行

$temp=curl_exec($ch);

//关闭CURL连线

curl_close($ch)

Get参数可以直接在网址传递例如网址後面加的?SomeVar=test,但是一旦资料量很大,用POST送还是比较适合。

简易的使用语法(POST):

//建立CURL连线

$ch=curl_init();

//设定撷取的URL网址

curl_setopt($ch,CURLOPT_URL,”

);

curl_setopt($ch,CURLOPT_HEADER,false);

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

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

//设定要传的变数A=值A&变数B=值B(中间要用&符号串接)

$PostData=”a=abc&b=def”;

//设定CURLOPT_POST为1或true,表示要用POST方式传递

curl_setopt($ch,CURLOPT_POST,1);

//CURLOPT_POSTFIELDS後面则是要传接的POST资料。

curl_setopt($ch,CURLOPT_POSTFIELDS,$PostData);

//执行

$temp=curl_exec($ch);

//关闭CURL连线

curl_close($ch)

以上的传递方式在某些状况下很好用,譬如说,没有设计完整的会员申请系统,就可以利用上面这些程式码,做一个自动注册申请机

本文链接:http://www.po-te.com/html/87965310.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。