CURL简介
curl简介
PHP所支持的libcurl库能够连接通讯各种服务器、使用各种协议。
libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap, 同时也支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传 、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。
需求
PHP版本>=7.10.5,并且安装libcurl包才能使用cURL函数。
配置相关的预定义常量
更多请参考:https://www.php.net/manual/zh/function.curl-setopt.php
序号 | 预定义常量 | 描述 |
---|---|---|
1 | CURLOPT_URL |
需要获取的 URL 地址,也可以在curl_init($url ) 初始化会话的时候直接传参设置。 |
2 | CURLOPT_HTTPGET |
true 时会设置 HTTP 的 method 为 GET,由于默认是 GET,所以只有 method 被修改时才需要这个选项。 |
3 | CURLOPT_HEADER |
true,启用时会将头文件的信息作为数据流输出。 |
4 | CURLOPT_RETURNTRANSFER |
设置为true或1表示如果请求成功只将结果返回,不自动输出任何内容。 |
cURL函数的使用步骤
curl_init() 初始化 cURL会话
通过 curl_setopt() 设置需要的全部选项
使用 curl_exec() 来执行会话
- 执行完会话后使用 curl_close() 关闭会话
curl示例:
<?php
// echo phpinfo();
// var_dump($c);
$url = 'http://apis.juhe.cn/simpleWeather/query?';
$key = 'key';
$city = '三亚';
$params = http_build_query(["key" => $key, "city" => $city]);
// var_dump($params);
// http_build_query 将数组格式化成url
$c = curl_init(); //返回一个curl句柄资源类型
//curl_setopt() 来设置各项设置
curl_setopt($c, CURLOPT_URL, $url . $params);
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_HEADER, false); //true,启用时会将头文件的信息作为数据流输出。
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); //设置为true或1表示如果请求成功只将结果返回,不自动输出任何内容。如果想拿到数据转成数组,只能以数据流的方式,不能让她输出结果
$res = curl_exec($c);
$res = json_decode($res, true);
// var_dump($res);
curl_close($c); //需要关闭数据会话
// echo $res["reason"] . "</br>";
if ($res["error_code"] == '') {
echo "当前城市为" . $res['result']['city'] . "___当前最高温度为" . $res["result"]["realtime"]["temperature"] . "___当前最低温度为:" . $res["result"]["realtime"]["humidity"] . "____今日天气:" . $res["result"]["realtime"]["info"] . $res["result"]["realtime"]["direct"] . $res["result"]["realtime"]["power"];
} else {
echo "额度超出或查询失败请检查以下信息</br>";
switch ($res["error_code"]) {
case '207301':
echo '错误的查询城市名';
break;
case '207302':
echo '查询不到该城市的相关信息';
break;
case '10012':
echo '请求超过次数限制';
break;
case '10013':
echo '测试KEY超过请求限制';
break;
default:
echo '网络错误,请重试';
break;
}
}
curl文件的操作:
<?php
// echo phpinfo();
namespace curl;
class url
{
function index($url, $key, $city)
{
$params = http_build_query(["key" => $key, "city" => $city]);
// var_dump($params);
// http_build_query 将数组格式化成url
$c = curl_init(); //返回一个curl句柄资源类型
//curl_setopt() 来设置各项设置 或者将值传入
curl_setopt($c, CURLOPT_URL, $url . $params);
curl_setopt($c, CURLOPT_POST, 1);
curl_setopt($c, CURLOPT_HEADER, false); //true,启用时会将头文件的信息作为数据流输出。
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); //设置为true或1表示如果请求成功只将结果返回,不自动输出任何内容。如果想拿到数据转成数组,只能以数据流的方式,不能让她输出结果
$res = curl_exec($c);
$res = json_decode($res, true);
// var_dump($res);
curl_close($c); //需要关闭数据会话
// echo $res["reason"] . "</br>";
if ($res["error_code"] == '') {
return "当前城市为" . $res['result']['city'] . "___当前最高温度为" . $res["result"]["realtime"]["temperature"] . "___当前最低温度为:" . $res["result"]["realtime"]["humidity"] . "____今日天气:" . $res["result"]["realtime"]["info"] . $res["result"]["realtime"]["direct"] . $res["result"]["realtime"]["power"];
} else {
echo "额度超出或查询失败请检查以下信息</br>";
switch ($res["error_code"]) {
case '207301':
return '错误的查询城市名';
break;
case '207302':
return '查询不到该城市的相关信息';
break;
case '10012':
return '请求超过次数限制';
break;
case '10013':
return '测试KEY超过请求限制';
break;
default:
return '网络错误,请重试';
break;
}
}
}
function p($ch)
{
$handle = fopen('ouyang.txt', "w");
curl_setopt($ch, CURLOPT_FILE, $handle); //CURLOPT_FILE设置输出文件,后面是fopen打开的文件流
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch); //执行该句柄
if (curl_error($ch)) {
// fopen打开fwrite写入
fwrite($handle, curl_error($ch));
}
curl_close($ch); //关闭数据流
fclose($handle); //关闭文件
}
}
// var_dump($c);
$url = 'http://apis.juhe.cn/simpleWeather/query?';
$key = 'key秘钥';
$city = '三亚';
$ch = curl_init('http://ouyangke.net/');
$c = new url;
echo $c->index($url, $key, $city);
$c->p($ch);
curl以文件方式:
function p($ch)
{
$handle = fopen('ouyang.txt', "w");
curl_setopt($ch, CURLOPT_FILE, $handle); //CURLOPT_FILE设置输出文件,后面是fopen打开的文件流
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch); //执行该句柄
if (curl_error($ch)) {
// fopen打开fwrite写入
fwrite($handle, curl_error($ch));
}
curl_close($ch); //关闭数据流
fclose($handle); //关闭文件
}
function f($fres)
{
$arr = json_decode($fres, true);
// var_dump($arr);
var_dump($arr["newslist"]);
for ($i = 0; $i < count($arr["newslist"]); $i++) {
echo "<br>" . "当前在" . $arr["newslist"][$i]["continents"] . "——当前国家为:" . $arr["newslist"][$i]["provinceName"] . "--当前时间为:" . date('Y-m-d H:i:s', time()) . "--当前确认数为:" . $arr["newslist"][$i]["currentConfirmedCount"];
}
}
$fres = file_get_contents("http://api.tianapi.com/txapi/ncovabroad/index?key=6c6d319a9f3b53c53b375c56fbd39207");
var_dump($c->f($fres));