怎么在php项目中实现一个CURL远程请求?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
cURL
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服务器等等。
GET案例
/**
* curl_get
* @param $url
* @param null $param
* @param null $options
* @return array
*/
function curl_get($url,$param = null,$options = null){
if(empty($options)){
$options = array(
'timeout' => 30,// 请求超时
'header' => array(),
'cookie' => '',// cookie字符串,浏览器直接复制即可
'cookie_file' => '',// 文件路径,并要有读写权限的
'ssl' => 0,// 是否检查https协议
'referer' => null
);
}else{
empty($options['timeout']) && $options['timeout'] = 30;
empty($options['ssl']) && $options['ssl'] = 0;
}
$result = array(
'code' => 0,
'msg' => 'success',
'body' => ''
);
if(is_array($param)){
$param = http_build_query($param);
}
$url = strstr($url,'?')?trim($url,'&').'&'.$param:$url.'?'.$param;
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);// 设置url
!empty($options['header']) && curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); // 设置请求头
if(!empty($options['cookie_file']) && file_exists($options['cookie_file'])){
curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']);
curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']);
}else if(!empty($options['cookie'])){
curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']);
}
curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); //curl解压gzip页面内容
curl_setopt($ch, CURLOPT_HEADER, 0);// 不获取请求头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面
!$options['ssl'] && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); // 禁止服务器端的验证ssl
!empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']);//伪装请求来源,绕过防盗
curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);
//执行并获取内容
$output = curl_exec($ch);
//对获取到的内容进行操作
if($output === FALSE ){
$result['code'] = 1; // 错误
$result['msg'] = "CURL Error:".curl_error($ch);
}
$result['body'] = $output;
//释放curl句柄
curl_close($ch);
return $result;
}
POST案例
/**
* curl_post
* @param $url 请求地址
* @param null $param get参数
* @param array $options 配置参数
* @return array
*/
function curl_post($url,$param = null,$options = array()){
if(empty($options)){
$options = array(
'timeout' => 30,
'header' => array(),
'cookie' => '',
'cookie_file' => '',
'ssl' => 0,
'referer' => null
);
}else{
empty($options['timeout']) && $options['timeout'] = 30;
empty($options['ssl']) && $options['ssl'] = 0;
}
$result = array(
'code' => 0,
'msg' => 'success',
'body' => ''
);
if(is_array($param)){
$param = http_build_query($param);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);// 设置url
!empty($options['header']) && curl_setopt($ch, CURLOPT_HTTPHEADER, $options['header']); // 设置请求头
if(!empty($options['cookie_file']) && file_exists($options['cookie_file'])){
curl_setopt($ch, CURLOPT_COOKIEFILE, $options['cookie_file']);
curl_setopt($ch, CURLOPT_COOKIEJAR, $options['cookie_file']);
}else if(!empty($options['cookie'])){
curl_setopt($ch, CURLOPT_COOKIE, $options['cookie']);
}
curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); //curl解压gzip页面内容
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
curl_setopt($ch, CURLOPT_HEADER, 0);// 不获取请求头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面
!$options['ssl'] && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']); // 禁止服务器端的验证ssl
!empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']);//伪装请求来源,绕过防盗
curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);
//执行并获取内容
$output = curl_exec($ch);
//对获取到的内容进行操作
if($output === FALSE ){
$result['code'] = 1; // 错误
$result['msg'] = "CURL Error:".curl_error($ch);
}
$result['body'] = $output;
//释放curl句柄
curl_close($ch);
return $result;
}
关于怎么在php项目中实现一个CURL远程请求问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。