html - 如何在服务器上读取从客户端发送的 HttpRequest 数据

标签 html dart

如何在 Dart 中从客户端、服务器上读取通过 POST 方法发送的 HttpRequest 数据?

我像这样从客户端发送消息:

HttpRequest request = new HttpRequest();
var url = "http://127.0.0.1:8081";
request.open("POST", url, async: false);

String data = 'hello from client'; 
request.send(data);

在服务器上,我正在捕获这样的请求:

HttpServer.bind('127.0.0.1', 8081).then((server) {
server.listen((HttpRequest request) {

//DATA SHOULD BE READ HERE 



});
});

但我不知道如何实际读取数据... HttpRequest 中没有数据属性,也没有其他任何...

编辑这就是我现在得到答案的方式:

HttpServer.bind('127.0.0.1', 8081).then((server) {
server.listen((HttpRequest request) {
  //DATA SHOULD BE READ HERE 
  print("got it");
  print(request.method);
  if(request.method == "POST") {
    print("got it 2");
    List<int> dataBody = new List<int>();
    request.listen(dataBody.addAll, onDone: () {
      var postData = new String.fromCharCodes(dataBody);
      print(postData);
      });
    }
 });
});

但出于某种原因,request.method 不是“POST”而是“OPTIONS”,如果我更改为 if(request.method == "OPTIONS") ,则 print(postData)仍然不会返回任何内容...

最佳答案

您可以使用 StringDecoder 将 HttpRequest 中的“List of Int”转换为“String”。因为无论你发送的是 json、纯文本还是 png,Dart 总是以以下形式发送数据 服务器的“Int 列表”。另一种方法是使用在 Heroku Steam v0.6.2 Dart Editor 0.4.3_r20602 Dat SDK 0.4.3.5_r26062 上测试的流(http://www.dartlang.org/articles/feet-wet-streams/)

例如,

客户:

 import 'dart:html';
 import 'dart:json' as Json;
 import 'dart:async';
 import 'dart:uri';
 final String data = 'Hello World!';
 void _sendPNG(String pngData) {
 HttpRequest request = new HttpRequest(); // create a new XHR
 // add an event handler that is called when the request finishes
 request.onReadyStateChange.listen((_) 
 {
 if (request.readyState == HttpRequest.DONE &&
 (request.status == 200 || request.status == 0)) {
 // data saved OK.
 print(request.responseText); // output the response from the server
 }
                  }
 );
 // POST the data to the server Async
 print('Sending Photos to the server...');
 var url = "/png";
 request.open("POST", url);
 request.setRequestHeader("Content-Type", "text/plain");
 request.send(data);
 }

服务器:

 import 'dart:io';
 import 'dart:async';
 import 'dart:json' as Json;
 import "package:stream/stream.dart";
 import 'package:xml/xml.dart' as xml;
 import 'package:unittest/unittest.dart';
 import 'package:rikulo_commons/mirrors.dart';
 void receivePNG(HttpConnect connect){
 var request = connect.request;
 var response = connect.response;
 if(request.uri.path == '/png' && request.method == 'POST')
  {
   String png='';
   response.write('The server received png request!');
   //read incoming List<int> data from request and use StringDecoder to transform   incoming data to string
   var stream = request.transform(new StringDecoder());
   stream.listen((value){
   print(value);
   //Hello World!
  }
  else
  {
   response.write('error');
   response.statusCode = HttpStatus.NOT_FOUND;
   connect.close();
   }
  }

配置.dart

 var _mapping = {
  "/": home,
  "/png": receivePNG,
 };

关于html - 如何在服务器上读取从客户端发送的 HttpRequest 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15882366/

相关文章:

javascript - 如何做一个计数器计时器,它在结束时会显示一个 div,它会保持一段时间并再次重新启动

html - CSS:重叠无序垂直列表

flutter - 使用路由并从子窗口小部件传递值

Dart:闭包研究

html - 将 HTML 电子邮件发送到 Gmail 时更改表格中的单元格高度

javascript - 使用 javascript 打印表格元素

javascript - 自定义 CSS 按钮动画在 MVC C# 局部 View 中不起作用

flutter - Flutter 桌面版中的 YouTube 播放器 (Windows)

flutter - 为什么List-View Builder在SmartRefresher小部件中返回高度和宽度固定的子级?

android - Flutter:图像溢出容器