这又一次让我对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. LPC-Link-II Rev C JTAG

  2. Synchronize Ultimate

    支持多种服务器和主流云网盘进行同步 http://www.icecoldapps.com/ Unlock Code : xda201506 Unlock Code : icecoldapps20150 ...

  3. RDMA over TCP的协议栈工作过程浅析

    http://blog.chinaunix.net/uid-140205-id-2849342.html

  4. Android笔记之 网络http通信

    0.在认识HTTP前先认识URL 在我们认识HTTP之前,有必要先弄清楚URL的组成,比如: http://www.******.com/china/index.htm 它的含义例如以下: 1. ht ...

  5. HTTP协议GET和POST的区别

    from http://blog.csdn.net/whuslei/article/details/6667095 权威点的说明请参考:http://www.cs.tut.fi/~jkorpela/f ...

  6. [Winform]安装在C盘,无操作权限的一个解决办法

    摘要 在对winform打包,进行安装的时候,一般会采用默认的安装路径,默认安装在C:\Program Files\xx或者C:\Program Files(x86)目录下,但windows有一种安全 ...

  7. 在ASP.NET MVC中使用Boostrap实现产品的展示、查询、排序、分页

    在产品展示中,通常涉及产品的展示方式.查询.排序.分页,本篇就在ASP.NET MVC下,使用Boostrap来实现. 源码放在了GitHub: https://github.com/darrenji ...

  8. 如何获得ios7系统中的蓝色

    最简洁的办法,直接使用下列代码: [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0] 最彻底的办法: OS7Colors是U ...

  9. C#编程(三十三)----------Array类

    Array类 创建数组 Array intArray1 = Array.CreateInstance(typeof(int), 5); for (int i = 0; i < 5; i++) { ...

  10. MVC异步分页

    如图: 1: 控制器代码 // // GET: /AjaxUser/ shopEntities shop = new shopEntities(); public ActionResult Index ...