如何在 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/