(三十一) Dart 中的网络请求教程:从知乎日报 API 获取数据

Dart 中的网络请求教程:从知乎日报 API 获取数据

前言

在 Dart 中,可以通过 dart:iodart:convert 库来实现网络请求和数据解析。本教程将通过一个简单的示例,展示如何从知乎日报 API 获取数据并打印结果。

知乎日报 API

我们将使用的 API 是知乎日报的最新新闻接口:

  • API 地址http://news-at.zhihu.com/api/3/stories/latest

该接口返回 JSON 格式的数据,包含最新新闻的标题、图片等信息。

示例代码解析

1. 引入必要的库

dart 复制代码
import 'dart:io'; // 用于网络请求
import 'dart:convert'; // 用于 JSON 解码

2. 主函数

在主函数中,调用 getDataFromZhihuAPI 方法,并打印结果。

dart 复制代码
void main() async {
  var result = await getDataFromZhihuAPI(); // 获取数据
  print(result); // 打印结果
}

3. 实现 getDataFromZhihuAPI 方法

该方法负责发送网络请求,并解析返回的 JSON 数据。

dart 复制代码
getDataFromZhihuAPI() async {
  // 1. 创建 HttpClient 对象
  var httpClient = new HttpClient();

  // 2. 创建 Uri 对象
  var uri = new Uri.http('news-at.zhihu.com', '/api/3/stories/latest');

  // 3. 发起请求,等待请求完成
  var request = await httpClient.getUrl(uri);

  // 4. 关闭请求,等待响应
  var response = await request.close();

  // 5. 解码响应的内容
  return await response.transform(utf8.decoder).join();
}

代码说明

  1. 创建 HttpClient 对象
    HttpClient 是 Dart 提供的用于发送 HTTP 请求的类。通过 new HttpClient() 创建一个实例。

  2. 创建 Uri 对象
    Uri.http 是一个工厂方法,用于创建一个 HTTP URI。它接受两个参数:主机名和路径。

  3. 发起请求

    使用 httpClient.getUrl(uri) 发起一个 GET 请求。该方法返回一个 HttpClientRequest 对象。

  4. 关闭请求并等待响应

    调用 request.close() 方法关闭请求并等待响应。该方法返回一个 HttpClientResponse 对象。

  5. 解码响应内容

    使用 response.transform(utf8.decoder) 将响应内容从字节流转换为字符串。join() 方法将流中的所有数据拼接成一个字符串。

运行结果

运行上述代码后,您将看到从知乎日报 API 获取的 JSON 数据打印在控制台上。例如:

json 复制代码
{
  "date": "20250403",
  "stories": [
    {
      "title": "新闻标题1",
      "images": ["http://example.com/image1.jpg"],
      "type": 0,
      "id": 123456789
    },
    {
      "title": "新闻标题2",
      "images": ["http://example.com/image2.jpg"],
      "type": 0,
      "id": 987654321
    }
  ]
}

注意事项

  1. 网络权限

    如果您在 Flutter 项目中运行此代码,请确保在 AndroidManifest.xml 中添加了网络权限:

    xml 复制代码
    <uses-permission android:name="android.permission.INTERNET"/>
  2. 错误处理

    在实际开发中,建议添加错误处理逻辑,例如捕获网络请求异常:

    dart 复制代码
    try {
      var result = await getDataFromZhihuAPI();
      print(result);
    } catch (e) {
      print("发生错误: $e");
    }
  3. 异步操作
    getDataFromZhihuAPI 方法使用了 asyncawait,因此必须在调用它的方法中也使用 async

总结

通过本教程,您已经学会了如何在 Dart 中使用 HttpClient 发送网络请求,并解析返回的 JSON 数据。您可以将此代码应用于其他 HTTP API,只需修改 URI 即可。希望本教程对您有所帮助!

相关推荐
ZC跨境爬虫7 小时前
3D 地球卫星轨道可视化平台开发 Day7(AI异步加速+卫星系列精简+AI Agent自动评论)
前端·人工智能·3d·html·json
ID_180079054737 小时前
淘宝 API 上货 / 商品搬家 业务场景实现 + JSON 返回示例
前端·javascript·json
M ? A7 小时前
Vue 动态组件在 React 中,VuReact 会如何实现?
前端·javascript·vue.js·经验分享·react.js·面试·vureact
vipbic8 小时前
独立开发复盘:我用 Uni-app + Strapi v5 肝了一个“会上瘾”的打卡小程序
前端·微信小程序
IT_陈寒9 小时前
Vite的热更新突然失效,原来是因为这个配置
前端·人工智能·后端
ZC跨境爬虫9 小时前
3D 地球卫星轨道可视化平台开发 Day8(分步渲染200颗卫星+ 前端分页控制)
前端·python·3d·重构·html
竹林8189 小时前
RainbowKit快速集成多链钱包连接,我如何从“连不上”到“丝滑切换”
前端·javascript
笨笨狗吞噬者9 小时前
Opus 4.7 使用体验
前端·ai编程
No8g攻城狮9 小时前
【前端】Vue 中 const、var、let 的区别
前端·javascript·vue.js
文心快码BaiduComate9 小时前
Comate搭载Kimi K2.6,长程13h!
前端·后端·程序员