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

del*_*oki 6 html5 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);
Run Code Online (Sandbox Code Playgroud)

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

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

//DATA SHOULD BE READ HERE 



});
});
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何实际读取数据... 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);
      });
    }
 });
});
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*t B 1

目前,POST 数据的处理有点困难。但本质上 HttpRequest 本身必须被“监听”。HttpRequest 本身就是一个流。特别是它是一个Stream<List<int>>. 所以基本上你的数据可能会作为多个传递给你的 HttpRequest List<int>。因此,我们需要重建数据,然后将其转换为字符串(假设您需要字符串,而不是二进制数据等)。这或多或少是我所做的:

HttpServer.bind('127.0.0.1', 8081).then((server) {
  server.listen((HttpRequest request) {
  if(request.method == "POST") {
    List<int> dataBody = new List<int>();
    request.listen(dataBody.addAll, onDone: () {
      var postData = new String.fromCharCodes(dataBody);
      // Do something with the data now.
    });
  }
  request.response.close();
});
Run Code Online (Sandbox Code Playgroud)

请注意,每次数据发送到服务器时,request.listen(dataBody.AddAll, ...)基本上都会调用List.addAll() (在数据较大或多部分表单的情况下,它可能不会一次全部发送)。这确保我们缓冲所有数据,直到流指示它已“完成”。在这种情况下,我们现在可以对收到的数据执行某些操作,例如将其转换为字符串。