curl 模拟浏览器请求,比如获取远程浏览器内容,虽然可以用file_get_contents来代替,但curl还支持浏览器类型,cookie和来源ip等,功能相比强大。
windows下安装curl拓展 :
在php.ini 搜索 extension_dir =
将 extension_dir = "./ext" 前面的分号去掉 当前目录下的ext便是拓展文件目录 去报目录下存在 php_curl.dll文件
将 ;extension=php_curl.dll 前面的分号去掉
<?php function request($url, $method = 'get', $data = null){ //初始化实例 $ch = curl_init($url); //curl_setopt($ch, CURLOPT_URL, $url); 初始化不传$url参数时使用 //返回数据不直接输出 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果是https请求 $ssl = preg_match('/^https:///i', $url) ? TRUE : FALSE; if ($ssl) { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 不从证书中检查SSL加密算法是否存在 } //如果是post请求 switch ($method) { case 'post': $hadFile = false; //开启post请求 curl_setopt($ch, CURLOPT_POST, 1); //启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。 //文件上传 5.5以上会走到这步 if (is_array($data)) { if (class_exists('CURLFile')) { foreach ($data as $key => $value) { if (is_string($value) && strpos($value, '@') === 0 && is_file(realpath(ltrim($value, '@')))) { $data[$key] = new CURLFile(realpath(ltrim($value, '@'))); $hadFile = true; } } } elseif (defined('CURLOPT_SAFE_UPLOAD')) { $hadFile = true; } } //发送post数据 //全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1¶2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。 $datastr = (!$hadFile && is_array($data)) ? http_build_query($data) : $data; curl_setopt($ch, CURLOPT_POSTFIELDS, $datastr); break; } //发送请求 $result = curl_exec($ch); //关闭连接返回返回值 curl_close($ch); if (empty($result)) { exit("错误请求"); } return $result; } 注意:要发送文件时,要在文件名前面加上 @ 前缀并使用完整路径
如果需要判断数据是否完整
$info = curl_getinfo($ch);
file_put_contents("d:/aa.png", $result);
$size = filesize("d:/aa.png");
if ($size != $info['size_download']) {
echo "下载的数据不完整,请重新下载";
} else {
echo "下载数据完整";
}
curl_setopt()介绍 http://www.runoob.com/php/func-curl_setopt.html
//通过curl获取天气
function weather(){ $city="西安"; $url="http://api.map.baidu.com/telematics/v2/weather?location=".$city."&ak=B8aced94da0b345579f481a1294c9094"; $content=request($url); $content=simplexml_load_string($content); echo $content->results->result[0]->date; echo "<br>"; echo $content->results->result[0]->weather; echo "<br>"; echo $content->results->result[0]->wind; echo "<br>"; echo $content->results->result[0]->temperature; echo "<br>"; }
//通过curl获取快递信息 function express(){ $postid="887693023517080150"; $url="https://www.kuaidi100.com/query?type=yuantong&postid=".$postid; $content=request($url); $content=json_decode($content); //数组 $content=$content['data']; foreach($content as $key=>$value){ echo $value['time']."###".$value['context']; echo "<br>"; } }
更多实例 https://mp.weixin.qq.com/s?__biz=MzIxMDA0OTcxNA==&mid=2654254693&idx=1&sn=082382b78efc421e8a72b78cd99fd595&scene=19#wechat_redirect