Flutter Dart/颤振POST请求和流响应

Flutter Dart/颤振POST请求和流响应,flutter,dart,Flutter,Dart,我想向相机发送POST请求,并接收返回的motionJPEG流。我用的是飞镖包。据我所知,我不能使用接收流作为响应。我正在尝试使用。我不知道如何创建一个合适的正文和标题 大多数IP摄像头使用GET访问MotionJPEG字节流。然而,我使用的相机是理光西塔相机,它需要一个POST命令,并将有效载荷发送到相机。如果有人知道我如何使用dart http模块创建一个正确的POST请求来返回一个带有头和正文的流,请提供帮助 导入'dart:async'; 将“package:http/http.dart

我想向相机发送POST请求,并接收返回的motionJPEG流。我用的是飞镖包。据我所知,我不能使用接收流作为响应。我正在尝试使用。我不知道如何创建一个合适的正文和标题

大多数IP摄像头使用GET访问MotionJPEG字节流。然而,我使用的相机是理光西塔相机,它需要一个POST命令,并将有效载荷发送到相机。如果有人知道我如何使用dart http模块创建一个正确的POST请求来返回一个带有头和正文的流,请提供帮助

导入'dart:async';
将“package:http/http.dart”导入为http;
导入“dart:convert”;
main()异步{
Uri url=Uri.parse('https://192.168.1.1/osc/commands/execute');
var request=http.request('POST',url);
Map bodyMap={'name':'camera.getLivePreview'};
request.body=jsonEncode(bodyMap);
映射头={“内容类型”:“应用程序/json”};
http.Client Client=http.Client();
流订阅视频流;
头(url,头:头);
发送(请求)。然后((响应){
var startIndex=-1;
var-endIndex=-1;
List buf=List();
videoStream=response.stream.listen((列表数据){
对于(变量i=0;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;
 }
导入'dart:convert';
导入“dart:io”;
导入“dart:async”;
main()异步{
字符串url=
'https://pae.ipportalegre.pt/testes2/wsjson/api/app/ws-authenticate';
地图={
'data':{'apikey':'123456789001234567890'},
};
打印(等待API请求(url、地图));
}
未来APIRESQUEST(字符串url,映射jsonMap)异步{
HttpClient HttpClient=新HttpClient();
HttpClientRequest=wait-httpClient.postrl(Uri.parse(url));
request.headers.set('content-type','application/json');
add(utf8.encode(json.encode(jsonMap));
HttpClientResponse response=等待请求。关闭();
//todo-您应该检查response.statusCode
String reply=wait response.transform(utf8.decoder.join();
httpClient.close();
回复;
}

为了更清楚地了解stackoverflow post,我也遇到了同样的问题,您所做的实际上是正确的,但是
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;
 }
导入'dart:convert';
导入“dart:io”;
导入“dart:async”;
main()异步{
字符串url=
'https://pae.ipportalegre.pt/testes2/wsjson/api/app/ws-authenticate';
地图={
'data':{'apikey':'123456789001234567890'},
};
打印(等待API请求(url、地图));
}
未来APIRESQUEST(字符串url,映射jsonMap)异步{
HttpClient HttpClient=新HttpClient();
HttpClientRequest=wait-httpClient.postrl(Uri.parse(url));
request.headers.set('content-type','application/json');
add(utf8.encode(json.encode(jsonMap));
HttpClientResponse response=等待请求。关闭();
//todo-您应该检查response.statusCode
String reply=wait response.transform(utf8.decoder.join();
httpClient.close();
回复;
}

为了更清楚,请看stackoverflow post

这是一段如何发送帖子并接收回流的代码。在我的例子中,我得到一个视频流并提取帧。在代码片段中,我提取了10帧进行测试

仍然可以使用dart http模块,但我还没有找到一种方法。使用HttpClient对我来说是可行的,并且在易用性方面大致相同

导入'dart:async';
导入“dart:io”;
导入“dart:convert”;
Uri apiUrl=Uri.parse('http://192.168.1.1/osc/commands/execute');
映射负载={'name':'camera.getLivePreview'};
void main()异步{
var client=HttpClient();
流订阅视频流;
var request=wait client.postrl(apiUrl)
..headers.contentType=contentType.json
..写入(JSONECODE(有效载荷));
HttpClientResponse response=等待请求。关闭();
var startIndex=-1;
var-endIndex=-1;
//单帧的帧缓冲区
List buf=List();
int计数器=0;
持续时间ts=null;
秒表计时器=秒表();
timer.start();
//设置帧列表
var框架列表=[];
对于(int frameCount=0;frameCount<10;frameCount++){
add(等待新文件('frame$frameCount.jpg');
}
//处理响应
var resStream=response.listen(
(列表数据){
对于(var i=0;i
这是一个如何发送帖子和接收流的片段。在我的例子中,我得到一个视频流并提取帧。在这个片段中,我提取了10帧进行测试

仍然可以使用dart http模块,但我还没有找到一种方法。使用HttpClient对我来说是可行的,并且在易用性方面大致相同

导入'dart:async';
导入“dart:io”;
导入“dart:convert”;
Uri apiUrl=Uri.parse('http://192.168.1.1/osc/commands/execute');
映射负载={'name':'camera.getLivePreview'};
void main()异步{
var client=HttpClient();
流订阅视频流;
var request=wait client.postrl(apiUrl)
..headers.contentType=contentType.json
..写入(JSONECODE(有效载荷));
HttpClientResponse response=等待请求。关闭();
var startIndex=-1;
var指数