Длина содержимого не соответствует размеру записи

#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.