当前位置: 首页 > 后端技术 > PHP

PHP中的cURL库

时间:2023-03-29 16:05:29 PHP

概述简介在设计之初,cURL(ClientURLLibrary)是一个命令行工具,用于使用URL语法传输数据。通过cURL库,我们可以在PHP脚本中自由使用某种协议来获取或提交数据,比如获取HTTP请求数据。简单的说,cURL就是客户端向服务器请求资源的工具。PHP支持DanielStenberg创建的libcurl库,它可以与各种服务器连接和通信,并使用各种协议。目前libcurl支持的协议有http、https、ftp、gopher、telnet、dict、file、ldap。libcurl还支持HTTPS证书、HTTPPOST、HTTPPUT、FTP上传(也通过PHP的FTP扩展)、基于HTTP表单的上传、代理、cookie、用户名+密码身份验证。优点在PHP中,获取某个URL的内容其实很简单。实现的方法有很多种,比如使用file_get_contents()函数:file_get_contents()函数虽然使用方便,但不够灵活,无法处理错误。在一些复杂的请求中,无法设置请求头、cookies、proxy、authentication等相关信息,更不用说向服务器提交表单数据或上传文件了。cURl库不仅支持丰富的网络协议,还提供了强大的方法来设置各种URL请求参数。cURL的使用场景很多,比如访问web资源,获取WebService接口数据,下载FTP服务器文件等。使用基本步骤使用cURL发送URL请求,步骤大致分为以下四步:初始化cURL会话;设置请求选项;执行cURL会话;关闭cURL会话。//1.初始化cURL会话$ch=curl_init();//2.设置请求选项curl_setopt($ch,CURLOPT_URL,"https://segmentfault.com");curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);#获取的信息以字符串的形式返回,而不是直接输出curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);#禁用cURL验证对等证书以支持HTTPS访问//3.执行cURL会话$response=curl_exec($ch);var_dump($response);//4.关闭cURL会话curl_close($ch);cURL主要通过curl_setopt()函数设置请求选项。各个选项的具体说明请参考http://php.net/manual/zh/func...错误处理curl_error()函数可用于查看cURL会话错误详情,curl_getinfo()函数可用于查看响应信息。因此,通过这两个函数,我们可以实现一个简单的错误处理器。比如我们现在访问一个不存在的URL地址:$url,CURLOPT_RETURNTRANSFER=>1,#获取的信息以字符串形式返回CURLOPT_POST=>1,#发送POST请求CURLOPT_POSTFIELDS=>$data,#POST请求数据]);$response=curl_exec($ch);curl_close($ch);返回$response;}$url='http://localhost/test.php';$data=['id'=>1,'username'=>'jochen'];echocurl_post($url,$data);2.文件上传CURLOPT_POSTFIELDS:所有数据使用HTTP协议中的“POST”操作发送。要发送文件,请在文件名前添加@前缀并使用完整路径。文件类型可以在文件名后以“;type=mimetype”的格式指定。这个参数可以是一个urlencoded的字符串,比如'val1=1&val2=2&...',或者一个以字段名作为键、字段数据作为值的数组。通过cURL发送POST请求上传文件:$url,CURLOPT_RETURNTRANSFER=>1,#获取到的信息returnCURLOPT_POST=>1,#发送POST请求CURLOPT_POSTFIELDS=>$data,#POST请求数据]);$response=curl_exec($ch);curl_close($ch);返回$response;}$url='http://localhost/test.php';$data=['id'=>1,'file'=>'@/root/image/boy.jpg'];echocurl_post($url,$data);3、文件下载其实文件下载和普通的GET请求是一样的,只不过文件下载是将返回的内容保存到一个文件中,而不是简单的输出。配合file_put_contents()函数实现文件下载:$url,CURLOPT_RETURNTRANSFER=>1,#获取的信息以字符串形式返回]);$response=curl_exec($ch);curl_close($ch);返回file_put_contents($path,$response);}curl_download('http://localhost/boy.jpg','./boy.jpg');4.HTTP认证如果服务器需要验证请求,设置CURLOPT_USERPWD参数:$url,CURLOPT_USERPWD=>"$user:$passwd",#format:"[username]:[password]"CURLOPT_RETURNTRANSFER=>1]);$result=curl_exec($ch);curl_close($ch);返回$result;}echocurl_auth('http://localhost','jochen','password');5.模拟登录这里主要展示使用cookies来保持登录状态进行模拟登录的应用。首先我们需要用账号密码登录获取cookie数据,然后使用登录的cookie获取页面数据:$url,CURLOPT_POST=>1,#发送POST请求CURLOPT_POSTFIELDS=>$data,#POST请求数据CURLOPT_COOKIEJAR=>$cookie#保存cookie信息到文件CURLOPT_RETURNTRANSFER=>1,#获取的信息以字符串形式返回]);$response=curl_exec($ch);curl_close($ch);return$response;}//获取页面数据functioncurl_content($url,$cookie){$ch=curl_init();curl_setopt_array($ch,[CURLOPT_URL=>$url,CURLOPT_COOKIEFILE=>$cookie#加载包含cookie数据的文件CURLOPT_RETURNTRANSFER=>1,#检索到的信息作为字符串返回]);$response=curl_exec($ch);curl_close($ch);return$response;}$post=['username'=>'jochen','password'=>'123456'];$cookie='./cookie.txt';if(curl_login('http://localhost/升ogin',$post,$cookie)){echocurl_content('http://localhost',$cookie);}cURL包装器PHPCurl类是一个编写良好的cURL包装器,可以发送HTTP请求并与任何类型的集成用于PHP5.3、5.4、5.5、5.6、7.0、7.1和HHVM的WebAPIPHPCurl类包装器库。这个库是众所周知的,并提供了一个非常简单的语法:get('https://www.example.com/');if($curl->error){echo'错误:'.$curl->错误码。':'。$curl->errorMessage。"\n";}else{echo'响应:'."\n";var_dump($curl->response);}参考文章:PHP客户端URL库中Curl的入门教程和常用示例就几行-phpcurl及常见坑详解Top7:BestCurlWrapperLibrariesforPHP