flutter - Dart/Flutter POST 请求和流响应

标签 flutter dart

我想向相机发送 POST 请求并接收返回的 motionJPEG 流。我正在使用 Dart http包裹。据我所知,我不能使用 http.post接收流作为响应。我正在尝试使用 http.Client.send .我不知道如何为 http.Request 创建合适的正文和标题.

大多数 IP 摄像机使用 GET 来访问 MotionJPEG 字节流。但是,我使用的相机是 RICOH THETA 相机,它需要将带有有效负载的 POST 命令发送到相机。如果有人知道如何使用 dart http 模块创建正确的 POST 请求以返回带有 header 和正文的流,请提供帮助。

import 'dart:async';
import 'package:http/http.dart' as http;
import 'dart:convert';

main() async {
  Uri url = Uri.parse('https://192.168.1.1/osc/commands/execute');
  var request = http.Request('POST', url);

  Map<String, String> bodyMap = {'name': 'camera.getLivePreview'};
  request.body = jsonEncode(bodyMap);

  Map<String, String> headers = {"Content-type": "application/json"};
  http.Client client = http.Client();
  StreamSubscription videoStream;
  client.head(url, headers: headers);
  client.send(request).then((response) {
    var startIndex = -1;
    var endIndex = -1;
    List<int> buf = List<int>();
    videoStream = response.stream.listen((List<int> data) {
      for (var i = 0; i < data.length; i++) {
        print(data[i]);
      }
    });
  });
}

最佳答案

我遇到了同样的问题,你所做的实际上是正确的,但是 HTTP 包修改了你的请求并添加了一些额外的细节,所以最好使用 dart:io HttpClient.

示例代码

import 'dart:convert';
import 'dart:io';
import 'dart:async';

main() async {
   String url =
  'https://pae.ipportalegre.pt/testes2/wsjson/api/app/ws-authenticate';
  Map map = {
       'data': {'apikey': '12345678901234567890'},
  };

  print(await apiRequest(url, map));
 }

 Future<String> apiRequest(String url, Map jsonMap) async {
     HttpClient httpClient = new HttpClient();
     HttpClientRequest request = await httpClient.postUrl(Uri.parse(url));
     request.headers.set('content-type', 'application/json');
     request.add(utf8.encode(json.encode(jsonMap)));
     HttpClientResponse response = await request.close();
  // todo - you should check the response.statusCode
     String reply = await response.transform(utf8.decoder).join();
     httpClient.close();
     return reply;
 }

为了更清楚地了解 this stackoverflow 帖子

关于flutter - Dart/Flutter POST 请求和流响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63195155/

相关文章:

android-studio - 在Mac上使用Flutter设置Android Studio的问题

flutter - 更改散点图抖动的半径和颜色

flutter - 如何为文本字段提供初始值?

firebase - 将数据从 Firebase 存储到 SQLite 或在 flutter 中离线存储的最佳方式是什么?

firebase - 如何在flutter的 ListView 中显示Firebase数组

android - 输入几行后文本输入的底部溢出 flutter

dart - Flutter - 如何使用 Canvas 围绕中心旋转图像

flutter - Dart/flutter 错误 : A value of type 'AuthSession' can't be assigned to a variable of type 'CognitoAuthSession'

android - 升级后 Flutter 无法同时在 IOS 和 Android 上运行

flutter - 如何控制基于父项或子项的调整大小行为?