博客列表 >使用 curl 扩展获取其他服务器资源

使用 curl 扩展获取其他服务器资源

赵大叔
赵大叔原创
2022年03月02日 10:12:55802浏览

使用 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() 关闭会话

请求接口数据:

  1. <?php
  2. // echo phpinfo();
  3. $url = 'http://apis.juhe.cn/simpleWeather/query?';
  4. $key = '99ab468953521e0fa2a28ee905871cc5';
  5. $city = '上海';
  6. // http_build_query 将数组格式化成url
  7. $params = http_build_query(["key" => $key, "city" => $city]);
  8. // var_dump($params);
  9. $curl = curl_init(); // 返回一个curl句柄资源类型
  10. // curl_setopt()来设置各项设置
  11. curl_setopt($curl, CURLOPT_URL, $url . $params);
  12. curl_setopt($curl, CURLOPT_POST, 1);
  13. // true,启用时会将头文件的信息作为数据流输出。
  14. curl_setopt($curl, CURLOPT_HEADER, false);
  15. // 设置为true或1表示如果请求成功只将结果返回,不自动输出任何内容。如果想拿到数据转成数组,只能以数据流的方式,不能让她输出结果
  16. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  17. $res = curl_exec($curl);
  18. $res = json_decode($res, true);
  19. echo '<pre>';
  20. print_r($res);
  21. // 需要关闭数据会话
  22. curl_close($curl);
  23. // echo $res["reason"] . "</br>";
  24. if (!$res["error_code"] == '') {
  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. }
  43. ?>
  44. <!DOCTYPE html>
  45. <html lang="en">
  46. <head>
  47. <meta charset="UTF-8">
  48. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  49. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  50. <title>天气情况</title>
  51. </head>
  52. <style type="text/css">
  53. table,table tr th, table tr td {border:1px solid #e6e6e6;}
  54. thead{background-color: #f2f2f2;}
  55. tr{text-align: center;height: 42px;}
  56. tr:hover{background-color: #f2f2f2;}
  57. input,textarea{
  58. box-sizing: border-box;
  59. -webkit-box-sizing: border-box;
  60. -moz-box-sizing: border-box;
  61. }
  62. </style>
  63. <body>
  64. <table cellspacing="0">
  65. <h2><?= $city ?>当前天气信息</h2>
  66. <thead>
  67. <tr>
  68. <th>温度</th>
  69. <th>湿度</th>
  70. <th>天气情况</th>
  71. <th>天气标识id</th>
  72. <th>风向</th>
  73. <th>风力</th>
  74. <th>空气质量指数</th>
  75. </tr>
  76. </thead>
  77. <tbody>
  78. <tr>
  79. <td><?= $res['result']['realtime']['temperature'] ?></td>
  80. <td><?= $res['result']['realtime']['humidity'] ?></td>
  81. <td><?= $res['result']['realtime']['info'] ?></td>
  82. <td><?= $res['result']['realtime']['wid'] ?></td>
  83. <td><?= $res['result']['realtime']['direct'] ?></td>
  84. <td><?= $res['result']['realtime']['power'] ?></td>
  85. <td><?= $res['result']['realtime']['aqi'] ?></td>
  86. </tr>
  87. </tbody>
  88. </table>
  89. <table>
  90. <h2><?= $city ?>未来5天天气信息</h2>
  91. <thead>
  92. <tr>
  93. <th>温度</th>
  94. <th>湿度</th>
  95. <th>天气情况</th>
  96. <th>天气标识id</th>
  97. <th>风向</th>
  98. <th>风力</th>
  99. <th>空气质量指数</th>
  100. </tr>
  101. </thead>
  102. <tbody>
  103. <?php foreach($res['result']['future'] as $val):?>
  104. <tr>
  105. <td><?= $val['temperature'] ?></td>
  106. <td><?= $val['humidity'] ?></td>
  107. <td><?= $val['info'] ?></td>
  108. <td><?php echo '白天:' .$val['wid']['day'] .'<br>'; echo '夜间:' .$val['wid']['night'] ?></td>
  109. <td><?= $val['direct'] ?></td>
  110. <td><?= $val['power'] ?></td>
  111. <td><?= $val['aqi'] ?></td>
  112. </tr>
  113. <?php endforeach?>;
  114. </tbody>
  115. </table>
  116. </body>
  117. </html>

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议