这又一次让我对http.request产生质疑

//======================================================
// 喜爱123四年级上英语MP3下载爬虫1.00
// 2018年5月10日
//======================================================
var http=require("http");            // http模块
var https=require("https");            // https模块
var zlib = require('zlib');            // 用于解析gzip网页
var fs=require('fs');                // 文件处理模块
var iconv = require('iconv-lite');    // 用于转码。
var cheerio = require("cheerio");    // 用于从HTML中以类似jquery方式查找目标

//--------------------------------------
// 下载单个mp3
//--------------------------------------
function downloadMp3(url){
    console.log("mp3:"+url+"下载开始");

    // 得到hostname,path和port
    var currUrl=url.replace("http://","");
    var pos=currUrl.indexOf("/");
    var hostname=currUrl.slice(0,pos);
    var path=currUrl.slice(pos);

    // 有端口加端口,没有端口默认80
    var port=80;
    if(hostname.indexOf(":")!=-1){
        var arr=hostname.split(":");
        hostname=arr[0];
        port=arr[1];
    }

    var name=url.slice(url.lastIndexOf("/"));

    // 初始化options
    options={
        hostname:hostname,
            port:port,
            path:path,
          method:'GET',
        /* headers:{
            'Referer':'https://www.nvshens.com',
          },*/  // 有需要再打开
    };

    req=http.request(options,function(resp){
        var imgData = "";
        resp.setEncoding("binary"); 

        resp.on('data',function(chunk){
            imgData+=chunk;
        });

        resp.on('end',function(){        

            // 创建文件
            var fileName="./"+name;
            fs.writeFile(fileName, imgData, "binary", function(err){
                if(err){
                    console.log("[downloadPic]文件   "+fileName+"  下载失败.");
                    console.log(err);
                }else{
                    console.log("文件"+fileName+"下载成功");
                }
            });
        });
    });

    // 超时处理
    req.setTimeout(7500,function(){
        req.abort();
    });

    // 出错处理
    req.on('error',function(err){
        if(err){
            console.log('[downloadMp3]文件   '+url+"  下载失败,"+'因为'+err);
        }
    });

    // 请求结束
    req.end();
}

//-------------------------------
// 入口函数
//-------------------------------
function main(){
    var profix='http://ting.xiai123.com/mp3/kewen/wysyy4s/Module0';
    var appendixs=['Unit1','Unit2','Words'];

    for(var i=1;i<10;i++){
        for(var j=0;j<appendixs.length;j++){
            var url=profix+i+'_'+appendixs[j]+".mp3";
            downloadMp3(url);
        }
    }

    //downloadMp3('http://ting.xiai123.com/mp3/kewen/wysyy4s/Module01_Unit2.mp3');
}

// 开始
main();

2018年5月10日13点44分

【Nodejs】使用http.request批量下载MP3,发现网络文件大于1000K时下载文件为0K的更多相关文章

  1. 【Azure 应用服务】PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法

    问题描述 在PHP项目部署在App Service后,上传文件如果大于1MB就会遇见 413 Request Entity Too Large 的问题. 问题解决 目前这个问题,首先需要分析应用所在的 ...

  2. 【Nodejs】使用request批量下载MP3,文件数量内容都没问题

    看来request远强于http.request是毋庸置疑的了. 代码如下: //====================================================== // 喜 ...

  3. C# 应用 - 使用 WepApp 处理文件上传、下载请求

    1. 代码 /// <summary> /// 文件上传下载控制器 /// </summary> public class FileController : ApiContro ...

  4. 抓取分析网页批量下载评书(3)之批量下载mp3

         本系列目录:    <1.搜索有声小说>    <2.分析详细页地址>     <3.批量下载mp3>      本篇是大结局,看过前两篇的放心吧,不会有 ...

  5. 文件上传和下载(可批量上传)——Spring(三)

    在文件上传和下载(可批量上传)——Spring(二)的基础上,发现了文件下载时,只有在Chrome浏览器下文件名正常显示,还有发布到服务器后,不能上传到指定的文件夹目录,如上传20160310.txt ...

  6. nodejs读取excel内容批量替换并生成新的html和新excel对照文件

    因为广告投放需要做一批对外投放下载页面,由于没有专门负责填充页面的编辑同学做,只能前端来做了, 拿到excel看了一下,需要生成200多个文件,一下子懵逼了. 这要是来回复制粘贴太low了 正好最新用 ...

  7. 文件上传和下载(可批量上传)——Spring(二)

    针对SpringMVC的文件上传和下载.下载用之前“文件上传和下载——基础(一)”的依然可以,但是上传功能要修改,这是因为springMVC 都为我们封装好成自己的文件对象了,转换的过程就在我们所配置 ...

  8. 批量修改mp3文件的title等

    批量修改mp3文件的title等 不是改文件名哦: 下载地址:https://mp3tag.en.softonic.com/ 帮助文档:file:///C:/Program%20Files%20(x8 ...

  9. ANDROID_MARS学习笔记_S01原始版_021_MP3PLAYER001_下载mp3文件

    一.简介 1.在onListItemClick()中new Intent,Intent以存储序列化后的mp2Info对象作为参数,启动serivce 2.DownloadService在onStart ...

随机推荐

  1. Lex与Yacc学习

    http://www.cnblogs.com/shine-yr/p/5214976.html

  2. firedac连接WINDOWS的ORACLE

    firedac连接WINDOWS的ORACLE 首先安装OCI FOR WINDOWS.OCI分WIN32和WIN64,且OCI的版本要和ORACLE的版本相一致才行. FIREDAC指定OCI驱动程 ...

  3. Informix 常用函数

    一.内部函数 1.内部合计函数 1)COUNT(*) 返回行数 2)COUNT(DISTINCT COLNAME) 返回指定列中唯一值的个数 3)SUM(COLNAME/EXPRESSION) 返回指 ...

  4. OCP-1Z0-051-题目解析-第22题

    22. You need to create a table for a banking application. One of the columns in the table has the fo ...

  5. 疑犯追踪第五季/全集Person of Interest迅雷下载

    英文全名Person of Interest,第5季(2015)CBS.本季看点:<疑犯追踪>本季剧组暗示Finch可能重建机器,这次他会给机器更多自由(如Root一直要求的那样).或许新 ...

  6. centos7更改为启动桌面或命令行模式

    进入cenos7的命令行模式 终端输入“init 3”回车进入命令行模式 登录成功后 # systemctl get-default //获取当前系统启动模式 查看配置文件 # cat /etc/in ...

  7. 关于MySQL的行转列的简单应用(二)---group函数

    MySQL的行转列.列转行.连接字符串  concat.concat_ws.group_concat函数用法使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一 ...

  8. Caffe常用层参数介绍

    版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/Cheese_pop/article/details/52024980 DATA crop:截取原图像中一个 ...

  9. Apache的三种工作模式

    Web服务器Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式. 它们分别是prefork,worker和event,它们同时也代表这Apac ...

  10. Windbg命令学习15(bp bm bu bl bc ba断点)

    以下以skinhgy为例,windbg附加运行 1. bp 命令是在某个地址下断点, 可以 bp 0x7783FEB 也可以 bp MyApp!SomeFunction . 对于后者,WinDBG 会 ...