博主信息
博文 37
粉丝 1
评论 0
访问量 33023
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
curl请求第三方资源包括api及文件操作以及将url的json以文件方式读取转换成对象
卢先生
原创
714人浏览过

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函数的使用步骤

  1. curl_init() 初始化 cURL会话

  2. 通过 curl_setopt() 设置需要的全部选项

  3. 使用 curl_exec() 来执行会话

  4. 执行完会话后使用 curl_close() 关闭会话

curl示例:

  1. <?php
  2. // echo phpinfo();
  3. // var_dump($c);
  4. $url = 'http://apis.juhe.cn/simpleWeather/query?';
  5. $key = 'key';
  6. $city = '三亚';
  7. $params = http_build_query(["key" => $key, "city" => $city]);
  8. // var_dump($params);
  9. // http_build_query 将数组格式化成url
  10. $c = curl_init(); //返回一个curl句柄资源类型
  11. //curl_setopt() 来设置各项设置
  12. curl_setopt($c, CURLOPT_URL, $url . $params);
  13. curl_setopt($c, CURLOPT_POST, 1);
  14. curl_setopt($c, CURLOPT_HEADER, false); //true,启用时会将头文件的信息作为数据流输出。
  15. curl_setopt($c, CURLOPT_RETURNTRANSFER, true); //设置为true或1表示如果请求成功只将结果返回,不自动输出任何内容。如果想拿到数据转成数组,只能以数据流的方式,不能让她输出结果
  16. $res = curl_exec($c);
  17. $res = json_decode($res, true);
  18. // var_dump($res);
  19. curl_close($c); //需要关闭数据会话
  20. // echo $res["reason"] . "</br>";
  21. if ($res["error_code"] == '') {
  22. echo "当前城市为" . $res['result']['city'] . "___当前最高温度为" . $res["result"]["realtime"]["temperature"] . "___当前最低温度为:" . $res["result"]["realtime"]["humidity"] . "____今日天气:" . $res["result"]["realtime"]["info"] . $res["result"]["realtime"]["direct"] . $res["result"]["realtime"]["power"];
  23. } else {
  24. echo "额度超出或查询失败请检查以下信息</br>";
  25. switch ($res["error_code"]) {
  26. case '207301':
  27. echo '错误的查询城市名';
  28. break;
  29. case '207302':
  30. echo '查询不到该城市的相关信息';
  31. break;
  32. case '10012':
  33. echo '请求超过次数限制';
  34. break;
  35. case '10013':
  36. echo '测试KEY超过请求限制';
  37. break;
  38. default:
  39. echo '网络错误,请重试';
  40. break;
  41. }
  42. }

curl文件的操作:

  1. <?php
  2. // echo phpinfo();
  3. namespace curl;
  4. class url
  5. {
  6. function index($url, $key, $city)
  7. {
  8. $params = http_build_query(["key" => $key, "city" => $city]);
  9. // var_dump($params);
  10. // http_build_query 将数组格式化成url
  11. $c = curl_init(); //返回一个curl句柄资源类型
  12. //curl_setopt() 来设置各项设置 或者将值传入
  13. curl_setopt($c, CURLOPT_URL, $url . $params);
  14. curl_setopt($c, CURLOPT_POST, 1);
  15. curl_setopt($c, CURLOPT_HEADER, false); //true,启用时会将头文件的信息作为数据流输出。
  16. curl_setopt($c, CURLOPT_RETURNTRANSFER, true); //设置为true或1表示如果请求成功只将结果返回,不自动输出任何内容。如果想拿到数据转成数组,只能以数据流的方式,不能让她输出结果
  17. $res = curl_exec($c);
  18. $res = json_decode($res, true);
  19. // var_dump($res);
  20. curl_close($c); //需要关闭数据会话
  21. // echo $res["reason"] . "</br>";
  22. if ($res["error_code"] == '') {
  23. return "当前城市为" . $res['result']['city'] . "___当前最高温度为" . $res["result"]["realtime"]["temperature"] . "___当前最低温度为:" . $res["result"]["realtime"]["humidity"] . "____今日天气:" . $res["result"]["realtime"]["info"] . $res["result"]["realtime"]["direct"] . $res["result"]["realtime"]["power"];
  24. } else {
  25. echo "额度超出或查询失败请检查以下信息</br>";
  26. switch ($res["error_code"]) {
  27. case '207301':
  28. return '错误的查询城市名';
  29. break;
  30. case '207302':
  31. return '查询不到该城市的相关信息';
  32. break;
  33. case '10012':
  34. return '请求超过次数限制';
  35. break;
  36. case '10013':
  37. return '测试KEY超过请求限制';
  38. break;
  39. default:
  40. return '网络错误,请重试';
  41. break;
  42. }
  43. }
  44. }
  45. function p($ch)
  46. {
  47. $handle = fopen('ouyang.txt', "w");
  48. curl_setopt($ch, CURLOPT_FILE, $handle); //CURLOPT_FILE设置输出文件,后面是fopen打开的文件流
  49. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  50. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  51. curl_setopt($ch, CURLOPT_HEADER, false);
  52. curl_exec($ch); //执行该句柄
  53. if (curl_error($ch)) {
  54. // fopen打开fwrite写入
  55. fwrite($handle, curl_error($ch));
  56. }
  57. curl_close($ch); //关闭数据流
  58. fclose($handle); //关闭文件
  59. }
  60. }
  61. // var_dump($c);
  62. $url = 'http://apis.juhe.cn/simpleWeather/query?';
  63. $key = 'key秘钥';
  64. $city = '三亚';
  65. $ch = curl_init('http://ouyangke.net/');
  66. $c = new url;
  67. echo $c->index($url, $key, $city);
  68. $c->p($ch);

curl以文件方式:

  1. function p($ch)
  2. {
  3. $handle = fopen('ouyang.txt', "w");
  4. curl_setopt($ch, CURLOPT_FILE, $handle); //CURLOPT_FILE设置输出文件,后面是fopen打开的文件流
  5. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  6. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  7. curl_setopt($ch, CURLOPT_HEADER, false);
  8. curl_exec($ch); //执行该句柄
  9. if (curl_error($ch)) {
  10. // fopen打开fwrite写入
  11. fwrite($handle, curl_error($ch));
  12. }
  13. curl_close($ch); //关闭数据流
  14. fclose($handle); //关闭文件
  15. }
  16. function f($fres)
  17. {
  18. $arr = json_decode($fres, true);
  19. // var_dump($arr);
  20. var_dump($arr["newslist"]);
  21. for ($i = 0; $i < count($arr["newslist"]); $i++) {
  22. echo "<br>" . "当前在" . $arr["newslist"][$i]["continents"] . "——当前国家为:" . $arr["newslist"][$i]["provinceName"] . "--当前时间为:" . date('Y-m-d H:i:s', time()) . "--当前确认数为:" . $arr["newslist"][$i]["currentConfirmedCount"];
  23. }
  24. }
  25. $fres = file_get_contents("http://api.tianapi.com/txapi/ncovabroad/index?key=6c6d319a9f3b53c53b375c56fbd39207");
  26. var_dump($c->f($fres));
批改老师:PHPzPHPz

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学