我试图使用HttpClient将数据发送到本地服务器。但是,数据永远不会添加到请求中,我使用此代码:
new HttpClient().put('127.0.0.1', 4040, '/employees/1').then((request) {
request.cookies.add(new Cookie('DARTSESSID',sessionId)..path = '/');
request.headers.add(HttpHeaders.ACCEPT_ENCODING, "");
request.headers.add(HttpHeaders.CONTENT_TYPE, "text/json");
request.write('{"id": 1, "name": "luis"}');
print(request.contentLength);
return request.close();
}).then(expectAsync((HttpClientResponse response) {
expect(response.statusCode, 200);
UTF8.decodeStream(response).then(expectAsync((body) {
expect(body, equals('"employee: 1"'));
}));
}));
但始终打印request.contentLenght为-1。我没有运气之前看过那些链接:
https://code.google.com/p/dart/issues/detail?id=13293
答案 0 :(得分:2)
写入请求是一种异步操作。仅仅因为contentLength说它仍然是-1并不意味着在将数据发送到服务器之前没有将数据添加到请求中。
此外:每当您添加新数据时,都不应更新内容长度。它是发送到服务器的值。 -1表示您还不知道尺寸。 我不确定,如果库自动更新它,如果它知道大小,但它不需要。
答案 1 :(得分:2)
ContentLength
-1
并不意味着没有数据,这意味着内容的长度未知,并且使用了流内容模式 - 对于HTTP 1.1,这通常会意思是Chunked
ContentEncoding
。
我试图在包含服务器的设置中插入您的代码,但没有单元测试的东西:
import 'dart:convert';
import 'dart:io';
void main() {
HttpServer.bind('127.0.0.1', 4040).then((server) {
server.listen((request) {
UTF8.decodeStream(request).then((body) {
print(body);
request.response.close();
});
});
new HttpClient().put('127.0.0.1', 4040, '/employees/1').then((request) {
request.cookies.add(new Cookie('DARTSESSID', "1")..path = '/');
request.headers.add(HttpHeaders.ACCEPT_ENCODING, "");
request.headers.add(HttpHeaders.CONTENT_TYPE, "text/json");
request.write('{"id": 1, "name": "luis"}');
print(request.contentLength);
return request.close();
}).then((HttpClientResponse response) {
UTF8.decodeStream(response).then((body) {
print(body);
});
});
});
}
当我运行代码时,我得到了
-1
{"id": 1, "name": "luis"}
正如所料。也许您遇到的问题是在服务器上?