摘要:在最近的工作中使用到的curl比较频繁,也踩到了一些坑,现在讲curl的使用过程与使用方法记录下来,方便以后查阅,可能的话也给看到这篇文章的人一点点启发就可以了
1.curl介绍
cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。
PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。
curl是一个库,能让你通过URL和许多不同种的服务器进行勾搭、搭讪和深入交流。
2.过程:
第一次使用到curl是一个第三方支付接口,需要服务器与第三方服务器进行数据交流,在网上查到了这个库,使用起来爽歪歪!!完成了业务需求
3.如何使用curl
我用过phpStudy集成环境和wamp集成环境。都有一个前题,即开启curl扩展
4.给大家介绍两个封装方法
/**
* GET 请求
* @param string $url
*/
function http_get($url){
$oCurl = curl_init();
if(stripos($url,"https://")!==FALSE){
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
}
curl_setopt($oCurl, CURLOPT_URL, $url);
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
$sContent = curl_exec($oCurl);
$aStatus = curl_getinfo($oCurl);
curl_close($oCurl);
if(intval($aStatus["http_code"])==200){
return $sContent;
}else{
return false;
}
}
/**
* POST 请求
* @param string $url
* @param array $param
* @param boolean $post_file 是否文件上传
* @return string content
*/
function http_post($url,$param,$post_file=false){
$oCurl = curl_init();
if(stripos($url,"https://")!==FALSE){
curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
}
if (is_string($param) || $post_file) {
$strPOST = $param;
} else {
$aPOST = array();
foreach($param as $key=>$val){
$aPOST[] = $key."=".urlencode($val);
}
$strPOST = join("&", $aPOST);
}
curl_setopt($oCurl, CURLOPT_URL, $url);
curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($oCurl, CURLOPT_POST,true);
curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST);
$sContent = curl_exec($oCurl);
$aStatus = curl_getinfo($oCurl);
curl_close($oCurl);
if(intval($aStatus["http_code"])==200){
return $sContent;
}else{
return false;
}
}
5.Curl的使用注意事项
(1).踩过坑的,在curl中的url中包含空格,回到值curl异常停止(这是在一个第三方短信接口对接的过程中遇到的问题,发现部分短信发送总是失败,最会找到他们的共同原因就是因为短信内容中包含空格,所以在使用curl的时候一定要对url去空格)
(2)对于application/json格式编码的数据,$_POST是不能直接获取的,需要通过file_get_contents(“php://input”)或者$GLOBALS[‘HTTP_RAW_POST_DATA']的方式获取。
目前就php curl的理解就这么多,学无止境,等我收货到更多的时候我会对这篇文章进行更改的!