#javascript #node.js #http #request
#javascript #node.js #http #запрос
Вопрос:
url = "http://api.soundcloud.com/tracks/<ID>/stream?client_id=YOUR_CLIENT_ID"
request.head(url, function(e, r, b) {
var headcontentlength = r.headers["content-length"];
}
request(url, function(e, r, b) {
var getcontentlength = r.headers["content-length"];
}).pipe(fs.createWriteStream(fileName));
fs.stat(fileName, function(e, s) {
var statscontentlength = s.size
}
Проблема в этом headcontentlength !== getcontentlength !== statscontentlength
.
Ни одно из этих значений не совпадает.
В некоторых случаях файловый поток закрывается и не соответствует длине содержимого из запроса head. Почему это должно быть так? Будут ли запросы head и get предоставлять разную длину содержимого? Как я могу это преодолеть? Может быть, это как-то связано с soundcloud api?
Комментарии:
1. Вы проверили
Content-Length
возвращенный при отправке GET-запроса?2. Вау, иногда они все могут быть разными. Я просто проверяю, хотя размер содержимого запроса get не всегда соответствует размеру записанного файла.
3. Что, если попробовать использовать
http.get
/http.request
встроенный в узел вместоrequest
модуля? Это улучшает ситуацию или вы видите то же самое?
Ответ №1:
Content-Length
Вполне возможно, что они будут отличаться, хотя это и не предполагается. Например, я видел, что некоторые веб-серверы (ну, серверы кэша) настроены Content-Length: -1
(что уже не является законным) в ответ на запрос HEAD, но установили правильное Content-Length
значение для запросов GET.