CURL功能,在php语言开发中用于发起对http的 各种请求操作,例如get、post等。
针对比较严格的站点,例如启用了ssl 安全验证的https站点,需要设置开启更多的参数;
CURLOPT_SSL_VERIFYHOST
的值
而libcurl
早期版本中这个变量是boolean
值,为true
时作用同目前设置为2
,后来出于调试需求
,增加了仅校验是否有CN字段
的选项,因此两个值true/false
就不够用了,升级为0/1/2
三个值。
再后来(libcurl_7.28.1
之后的版本),这个调试选项由于经常被开发者用错
,被去掉了,因此目前也不支持1
了,只有0/2
两种取值。
CURLOPT_SSL_VERIFYPEER 的值
false/true ; 表示是否开启验证https的ssl 证书检查。
当开启ssl证书检查,需要配置 证书和证书的ca 值等参数,如果是自己的站点,此参数可以设置为关闭 false。
下面是 用curl 发起 post 和get请求的函数示例;
function request_post($url, $param='', $fouces_json=false){
if (!$url) {
return ['error'=>1,'msg'=>'url不能为空'];
}
if($fouces_json){
$param = json_encode($param, JSON_UNESCAPED_UNICODE);
}
if(is_array($param)){
$param = http_build_query($param, null, '&');
}
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_CUSTOMREQUEST, "POST" );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)' );
curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $param);
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
$response = curl_exec ( $ch );
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return array($httpCode, $response);
}
function request_get($url){
// curl模式
if (function_exists('curl_init') && function_exists('curl_exec')) {
$ch = curl_init($url);
curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)' );
curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt ( $ch, CURLOPT_AUTOREFERER, 1 );
if (substr($url, 0, 8) == "https://") {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在
}
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}else{
$data = @file_get_contents($url);
if ($data !== FALSE) {
return $data;
}
}
return FALSE;
}
php为了简化get请求,提供了 file_get_contents 函数代替,很多时候可以直接用它来做get请求,因为它
不需要设置 额外参数,只要浏览器能打开的页面,它都能访问到。
但是,如果对于 有的api接口,需要通过header 传递token或者其他更多head 参数,就不能通过此函数实现了。
另外,推荐 大家采用 GuzzleHttp\Client 这个库,它是一个 非常完善的http客户端。能实现所有的 http请求类型。
例如 文件上传,move、put、delete 、get、post等 请求。
关于它的文档: https://guzzle-cn.readthedocs.io/zh_CN/latest/
好了本文全部结束,感谢您的阅读,希望能帮助到您。