curl是PHP的一个扩展,可以用来在服务器之间传输数据或文件。换句话说,curl是一个在服务器之间传输数据和文件的工具。用于采集网络中的html网页文件,其他服务器提供的接口数据等。打开curl扩展(1)在php.ini中打开curl扩展(2)将PHP安装路径保存到环境变量的系统变量中(环境变量之间的分隔符是英文分号)(3)重启apache服务器(4)重启电脑curl的一些常用配置项(1)通过CURLOPT_RETURNTRANSFER配置项设置,是直接显示结果(echo)还是返回结果(return)(2)对于HTTPS协议请求,需要验证客户端的安全证书,通常会跳过安全证书的验证(3)CURLOPT_HEADER是否返回一个由header信息封装的curl方法1:$p=$v;}}//发送http请求的方法//参数:提交的数据,默认为空publicfunctionsend($data=array()){//1.如果传递数据,则表示向服务器提交数据(post),如果没有传递数据,则认为从服务器读取资源(get)$ch=curl_init();//2.不管get还是post,都跳过证书验证curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);//3。设置请求的服务器地址curl_setopt($ch,CURLOPT_URL,$this->url);//4。判断是get还是postif(!empty($data)){curl_setopt($ch,CURLOPT_POST,true);curl_setopt($ch,CURLOPT_POSTFI埃尔兹,$数据);}//5。是否返回数据if($this->is_return===1){//返回curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);$result=curl_exec($ch);curl_close($ch);返回$结果;}else{//直接输出curl_exec($ch);curl_close($ch);}}}封装curl方法2://curlcollectorpublicfunctionhttp_curl($url,$type='get',$res='json',$arr=''){//1.初始化curl$ch=curl_init();//2。设置卷曲参数curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);if($type=='post'){curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$arr);}//3.Collect$output=curl_exec($ch);//4。关闭curl_close($ch);//如果返回值为json格式,则转为数组if($res=='json'){if(curl_errno($ch)){//请求失败,返回错误信息returncurl_error($ch);}else{//请求成功returnjson_decode($output,true);}}}//http_curlendcurl模拟文件上传指令:PHP5.6之前的版本上传文件使用:@Php5.6之后的版本使用newCURLFile()使得其他服务器收到数据后可以移动curl模拟cookie登录(1)当我们访问服务器时,服务器首先会在服务器创建一个session文件来保存用户的信息,方便在多个页面共享数据,然后服务器会告诉客户端在自己上创建一个cookie,形式为setcookie并保存会话文件的名称。询问服务器的时候,浏览器会在自己身上创建一个cookie文件,现在用我们的服务器访问:cookie保存在哪里?CURLOPT_COOKIEJAR配置项设置,把cookie保存在哪里(2)以后访问服务器的时候,随身携带cookie(里面有保存的session文件的名字),那么如何找到这个cookie呢?CURLOPT_COOKIEFILE配置项设置,每次请求携带哪个cookie文件优点是可以通过灵活的选项设置不同的HTTP协议参数,支持HTTPS。CURL可以根据URL前缀是“HTTP”还是“HTTPS”,自动选择是否对发送的内容进行加密。使用CURL发送请求的基本过程使用CURL的PHP??扩展发送HTTP请求一般有以下步骤:初始化连接句柄;设置卷曲选项;执行并取得结果;释放VURL连接句柄。下面的程序片段是一个典型的使用CURL发送HTTP的过程//1.初始化$ch=curl_init();//2.设置选项,包括URLcurl_setopt($ch,CURLOPT_URL,"http://www.devdo.net");curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_HEADER,0);//3.执行并获取HTML文档内容$output=curl_exec($ch);if($output===FALSE){echo"CURL错误:".curl_error($ch);}//4.释放curl句柄curl_close($ch);上面的代码使用了四个函数①curl_init()和curl_close()来初始化CURL连接,关闭CURL连接比较简单。②curl_exec()执行CURL请求。如果没有错误,函数返回对应URL返回的数据,满足一个字符串;如果发生错误,该函数返回FALSE。需要注意的是等号是用来判断输出是否为FALSE的,这是为了区分返回空字符串和错误。③CURL函数库中最重要的函数是curl_setopt(),它可以通过设置CURL函数库定义的选项来自定义HTTP请求。上面的代码片段中使用了三个重要的选项:CURLOPT_URL指定请求的URL;CURLOPT_RETURNTRANSFER设置为1表示后面执行的curl_exec函数返回的是URL的返回字符串,而不是将返回字符串定向到标准输出并返回TRUE;CURLLOPT_HEADER设置为0不返回HTTP标头信息。CURL有很多选项。你可以去PHP的官方网站查看CURL支持的所有选项的列表。获取CURL请求的输出信息执行curl_exec()函数后,可以使用curl_getinfo()函数获取CURL请求输出的相关信息。示例代码如下:curl_exec($ch);$info=curl_getinfo($sh);echo'Get'.$info['url'].'耗时'.$info['total_time'].'秒';在上面的代码中,curl_getinfo返回一个包含以下数据的关联数组:url:网络地址。content_type:内容编码。http_code:HTTP状态码。header_size:标题的大小。request_size:请求的大小。filetime:文件的创建时间。ssl_verify_result:SSL验证结果。redirect_count:跳转次数。total_time:总耗时。namelookup_time:DNS查询耗时。connect_time:等待连接所花费的时间。pretransfer_time:传输前的耗时准备。size_uplpad:上传数据的大小。size_download:下载数据的大小。speed_download:下载速度。speed_upload:上传速度。download_content_length:下载内容的长度。upload_content_length:上传内容的长度。starttransfer_time:开始传输的时间表。redirect_time:重定向耗时。curl_getinfo()函数还有一个可选参数$opt。通过这个参数可以设置一些常量,对应上面的字段。如果设置了第二个参数,则只返回指定的信息。例如$opt设置为CURLINFO_TOTAL_TIME,curl_getinfo()函数只会返回total_time,即传输所花费的总时间。当你只需要关注某些传输信息时,设置$opt参数是有意义的。如何使用CURL发送GET请求如何使用CURL发送GET请求,发送GET请求的关键是组装一个格式正确的URL。请求地址和GET数据用“?”隔开,然后GET变量的名称和值用“=”隔开,每个GET名称和值用“&”连接。PHP为我们提供了一个专门用于组装GET请求和数据部分的函数——http_build_query,它接受一个关联数组,返回关联数据描述的GET请求字符串。利用这个函数,结合CURL发送HTTP请求的一般流程,我们关闭了一个发送GET请求的函数——doCurlGetRequest,具体代码如下:***@desc关闭curl的调用接口,请求获取方法。*/functiondoCurlGetRequest($url,$data,$timeout=5){if($curl==""||$timeout<=0){返回假;}$url=$url.'?'.http_bulid_query($data);$con=curl_init((字符串)$url);curl_setopt($con,CURLOPT_HEADER,false);curl_setopt($con,CURLOPT_RETURNTRANSFER,true);curl_setopt($con,CURLOPT_TIMEOUT,(int)$timeout);returncurl_exec($con);}该函数将使用http_build_query组装的带有GET参数的URL传递给curl_init函数,然后使用CURL发送HTTP请求。要使用CURL发送POST请求,可以使用CURL提供的选项CURLOPT_POSTFIELDS。将此选项设置为POST字符串数据以将请求放入文本中。同样,我们实现了一个发送POST请求的函数——doCurlPostRequest,代码如下:requestString,$timeout=5){if($url==''||$requestString==''||$timeout<=0){returnfalse;}$con=curl_init((string)$url);curl_setopt($con,CURLOPT_HEADER,false);curl_setopt($con,CURLOPT_POSTFIELDS,$requestString);curl_setopt($con,CURLOPT_POST,true);curl_setopt($con,CURLOPT_RETURNTRANSFER,true);curl_setopt($con,CURLOPT_TIMEOUT,(int)$timeout);returncurl_exec($con);}除了在上面的代码中设置CURLOPT_POSTFIELDS之外,我们还将CURL_POST设置为true,表示本次请求为POST请求。GET数据也可以在POST请求中传输,只需在URL中组装GET请求数据即可。
