Node.js 使用http客户端向网站请求数据并保存

简介:

app.js代码:

复制代码
// 内置http模块,提供了http服务器和客户端功能
var http=require("http");

// 内置文件处理模块
var fs=require('fs');

// 创建一个将流数据写入文件的WriteStream对象
var outstream=fs.createWriteStream('./retval.html');

// 请求参数JSON
var options={
    hostname:'www.cnblogs.com',// 这里别加http://,否则会出现ENOTFOUND错误
        port:80,
        path:'/xiandedanteng',// 子路径
      method:'GET',
};

// 请求并获得数据
var req=http.request(options,function(resp){
    console.log('状态码resp.statusCode='+resp.statusCode);
    console.log('响应头resp.headers='+JSON.stringify(resp.headers));
    resp.setEncoding('utf8');

    resp.on('data',function(chunk){
        console.log('响应内容:'+chunk);

        outstream.write(chunk,'utf8');

        console.log('文件写入完毕。');
    });
});

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

// 出错处理
req.on('error',function(err){
    if(err.code=="ECONNRESET"){
        console.log('socket端口连接超时。');
    }else{
        console.log('请求发生错误,err.code:'+err.code);
    }
});

// 请求结束
req.end();
复制代码

 

获得的数据文件如下:

复制代码
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>逆火狂飙 - 博客园</title>
<link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=-wBWg2jMfLNV0-ScpDNxGkoH_gCbdW1yTVJLHzPL7HE1"/>
<link id="MainCss" type="text/css" rel="stylesheet" href="/skins/SimpleBlue/bundle-SimpleBlue.css?v=jJERBFSojhmgst84aaRDal9S3q1WoO-WcNudmMzGJS81"/>
<link id="mobile-style" media="only screen and (max-width: 768px)" type="text/css" rel="stylesheet" href="/skins/SimpleBlue/bundle-SimpleBlue-mobile.css?v=z0BacpCfWeLlXDCM0C158kTP_DMqMbGBapID4f-QztI1"/>
<link title="RSS" type="application/rss+xml" rel="alternate" href="http://www.cnblogs.com/xiandedanteng/rss"/>
<link title="RSD" type="application/rsd+xml" rel="EditURI" href="http://www.cnblogs.com/xiandedanteng/rsd.xml"/>
<link type="application/wlwmanifest+xml" rel="wlwmanifest" href="http://www.cnblogs.com/xiandedanteng/wlwmanifest.xml"/>
<script src="//common.cnblogs.com/script/jquery.js" type="text/javascript"></script>  
<script type="text/javascript">var currentBlogApp = 'xiandedanteng', cb_enable_mathjax=false;var isLogined=false;</script>
<script src="/bundles/blog-common.js?v=zLAewHCaOmEYGOn3iyM1yprOSNEWA2FkU2TsbgxrSSg1" type="text/javascript"></script>
</head>
<body>
<a name="top"></a>

<div id="home">
<div id="header">
    <div id="blogTitle">
        
<!--done-->
<div class="title"><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/xiandedanteng/">More Powerful</a></div>
<div class="subtitle">野生四张屌丝半调子curl程序员的逆袭</div>



        
    </div><!--end: blogTitle 博客的标题和副标题 -->
    <div id="navigator">
        
<ul id="navList">
<li id="nav_sitehome"></li>
<li id="nav_myhome"><a id="blog_nav_myhome" class="menu" href="http://www.cnblogs.com/xiandedanteng/">首页</a></li>
<li id="nav_newpost"><a id="blog_nav_newpost" class="menu" rel="nofollow" href="https://i.cnblogs.com/EditPosts.aspx?opt=1">新随笔</a></li>
<li id="nav_contact"><a id="blog_nav_contact" class="menu" rel="nofollow" href="https://msg.cnblogs.com/send/%E9%80%86%E7%81%AB%E7%8B%82%E9%A3%99">联系</a></li>
<li id="nav_rss"><a id="blog_nav_rss" class="menu" href="http://www.cnblogs.com/xiandedanteng/rss">订阅</a>
<!--<a id="blog_nav_rss_image" class="aHeaderXML" href="http://www.cnblogs.com/xiandedanteng/rss"><img src="//www.cnblogs.com/images/xml.gif" alt="订阅" /></a>--></li>
<li id="nav_admin"><a id="blog_nav_admin" class="menu" rel="nofollow" href="https://i.cnblogs.com/">管理</a></li>
</ul>

        <div class="blogStats">
            
            <div id="blog_stats">
<!--done-->
随笔-504&nbsp;
文章-0&nbsp;
评论-111&nbsp;
</div>
            
        </div><!--end: blogStats -->
    </div><!--end: navigator 博客导航栏 -->
</div><!--end: header 头部 -->
<div id="main">
    <div id="mainContent">
    <div class="forFlow">
        

<!--done-->

<div class="day">
    <div class="dayTitle">
        <a id="homepage1_HomePageDays_DaysList_ctl00_ImageLink" href="http://www.cnblogs.com/xiandedanteng/archive/2017/09/17.html">2017年9月17日</a>                  
    </div>
    
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl00_DayList_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/xiandedanteng/p/7534689.html">Node.js 使用http客户端向网站请求数据并显示</a>
            </div>
            <div class="postCon"><div class="cnblogs-post-body" id="postlist_postbody_7534689">正文内容加载中...</div><script type="text/javascript">getBlogPostBody(7534689);</script></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-09-17 08:42 逆火狂飙 阅读(0) 评论(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7534689" rel="nofollow">编辑</a></div>
            <div class="clear"></div>
        
</div>

<div class="day">
    <div class="dayTitle">
        <a id="homepage1_HomePageDays_DaysList_ctl01_ImageLink" href="http://www.cnblogs.com/xiandedanteng/archive/2017/09/16.html">2017年9月16日</a>                  
    </div>
    
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl01_DayList_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/xiandedanteng/p/7533330.html">近来这些事</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 8.21-8.26 Angularjs 8.27-9.8 Canvas 9.9- 9.12 Git,SpringBoot 9.13-9.16 Node.js<a href="http://www.cnblogs.com/xiandedanteng/p/7533330.html" class="c_b_p_desc_readmore">阅读全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-09-16 22:54 逆火狂飙 阅读(2) 评论(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7533330" rel="nofollow">编辑</a></div>
            <div class="clear"></div>
        
            <div class="postSeparator"></div>
        
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl01_DayList_TitleUrl_1" class="postTitle2" href="http://www.cnblogs.com/xiandedanteng/p/7531609.html">Node.js 文件系统流pipe到Http响应流中</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: // 内置http模块,提供了http服务器和客户端功能(path模块也是内置模块,而mime是附加模块) var http=require(&quot;http&quot;); var fs=require(&quot;fs&quot;); var _dirname=&quot;./html&quot; // 创建服务器,创建HTTP服务器要调用http.createServer()函数,它只有一个参数,是个回调函数,服务器每次收到http请求后都会...<a href="http://www.cnblogs.com/xiandedanteng/p/7531609.html" class="c_b_p_desc_readmore">阅读全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-09-16 16:07 逆火狂飙 阅读(1) 评论(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7531609" rel="nofollow">编辑</a></div>
            <div class="clear"></div>
        
</div>

<div class="day">
    <div class="dayTitle">
        <a id="homepage1_HomePageDays_DaysList_ctl02_ImageLink" href="http://www.cnblogs.com/xiandedanteng/archive/2017/09/15.html">2017年9月15日</a>                  
    </div>
    
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl02_DayList_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/xiandedanteng/p/7529088.html">Node.js 使用angularjs取得Nodejs http服务端返回的JSON数组示例</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: server.js代码: 页面Angularjs代码:<a href="http://www.cnblogs.com/xiandedanteng/p/7529088.html" class="c_b_p_desc_readmore">阅读全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-09-15 23:13 逆火狂飙 阅读(1) 评论(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7529088" rel="nofollow">编辑</a></div>
            <div class="clear"></div>
        
            <div class="postSeparator"></div>
        
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl02_DayList_TitleUrl_1" class="postTitle2" href="http://www.cnblogs.com/xiandedanteng/p/7529033.html">Node.js 使用jQuery取得Nodejs http服务端返回的JSON数组示例</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: server.js代码: 页面代码:<a href="http://www.cnblogs.com/xiandedanteng/p/7529033.html" class="c_b_p_desc_readmore">阅读全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-09-15 22:59 逆火狂飙 阅读(0) 评论(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7529033" rel="nofollow">编辑</a></div>
            <div class="clear"></div>
        
            <div class="postSeparator"></div>
        
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl02_DayList_TitleUrl_2" class="postTitle2" href="http://www.cnblogs.com/xiandedanteng/p/7528665.html">Node.js 使用jQuery取得Nodejs http服务端返回的JSON对象示例</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: server.js代码: 页面jQuery代码:<a href="http://www.cnblogs.com/xiandedanteng/p/7528665.html" class="c_b_p_desc_readmore">阅读全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-09-15 21:54 逆火狂飙 阅读(0) 评论(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7528665" rel="nofollow">编辑</a></div>
            <div class="clear"></div>
        
            <div class="postSeparator"></div>
        
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl02_DayList_TitleUrl_3" class="postTitle2" href="http://www.cnblogs.com/xiandedanteng/p/7526966.html">Node.js 本地Xhr取得Node.js服务端数据的例子</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 本以为用XHR取Nodejs http出的一段文字很简单,因为xhr取值和nodejs http出文字都是好弄的,谁知一试不是这回事,中间有个关键步骤需要实现。 nodejs http出文字显示在浏览器很容易,但是头信息是不完整的,下面resp.writeHead一句的红字部分就是这个关键步骤。 服<a href="http://www.cnblogs.com/xiandedanteng/p/7526966.html" class="c_b_p_desc_readmore">阅读全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-09-15 16:09 逆火狂飙 阅读(4) 评论(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7526966" rel="nofollow">编辑</a></div>
            <div class="clear"></div>
        
            <div class="postSeparator"></div>
        
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl02_DayList_TitleUrl_4" class="postTitle2" href="http://www.cnblogs.com/xiandedanteng/p/7525888.html">Node.js node主文件找不到时报出的Error:Cannot find module异常</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 如果执行&gt;Node xx.js时,xx,js找不到的话,报出的错误是Error:Cannot find module &#39;c:/test/xx.js&#39; 主文件名打错或者是点号打成逗号都会出这样的错。<a href="http://www.cnblogs.com/xiandedanteng/p/7525888.html" class="c_b_p_desc_readmore">阅读全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-09-15 13:06 逆火狂飙 阅读(3) 评论(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7525888" rel="nofollow">编辑</a></div>
            <div class="clear"></div>
        
            <div class="postSeparator"></div>
        
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl02_DayList_TitleUrl_5" class="postTitle2" href="http://www.cnblogs.com/xiandedanteng/p/7525228.html">Node.js 极简入门Helloworld版服务器例子</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: 粗浅得很,纯属备忘。 效果是:<a href="http://www.cnblogs.com/xiandedanteng/p/7525228.html" class="c_b_p_desc_readmore">阅读全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-09-15 10:56 逆火狂飙 阅读(2) 评论(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7525228" rel="nofollow">编辑</a></div>
            <div class="clear"></div>
        
</div>

<div class="day">
    <div class="dayTitle">
        <a id="homepage1_HomePageDays_DaysList_ctl03_ImageLink" href="http://www.cnblogs.com/xiandedanteng/archive/2017/09/14.html">2017年9月14日</a>                  
    </div>
    
            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl03_DayList_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/xiandedanteng/p/7522928.html">浅滩</a>
            </div>
            <div class="postCon"></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2017-09-14 20:51 逆火狂飙 阅读(1) 评论(0)  <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=7522928" rel="nofollow">编辑</a></div>
            <div class="clear"></div>
        
</div>

<div class="topicListFooter"><div id="nav_next_page"><a href="http://www.cnblogs.com/xiandedanteng/default.html?page=2">下一页</a></div></div>


    </div><!--end: forFlow -->
    </div><!--end: mainContent 主体内容容器-->

    <div id="sideBar">
        <div id="sideBarMain">
            
            <div id="calendar"><div id="blog-calendar" style="display:none"></div><script type="text/javascript">loadBlogDefaultCalendar();</script></div>
            
            <div id="leftcontentcontainer">
                <div id="blog-sidecolumn"></div><script type="text/javascript">loadBlogSideColumn();</script>
            </div>
            
        </div><!--end: sideBarMain -->
    </div><!--end: sideBar 侧边栏容器 -->
    <div class="clear"></div>
    </div><!--end: main -->
    <div class="clear"></div>
    <div id="footer">
        
<!--done-->
Copyright &copy;2017 逆火狂飙
    </div><!--end: footer -->
</div><!--end: home 自定义的最大容器 -->
</body>
</html>
复制代码

 













本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/xiandedanteng/p/7534689.html,如需转载请自行联系原作者


相关文章
|
3月前
|
JavaScript 前端开发 API
Node.js中发起HTTP请求的五种方式
以上五种方式,尽管只是冰山一角,但已经足以让编写Node.js HTTP请求的你,在连接世界的舞台上演奏出华丽的乐章。从原生的 `http`到现代的 `fetch`,每种方式都有独特的风格和表现力,让你的代码随着项目的节奏自由地舞动。
365 65
|
3月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
210 61
|
1月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
4月前
|
JavaScript 前端开发 开发者
Node学习笔记:HTTP模块
总的来说,Node.js的HTTP模块是一个强大的工具,可以帮助你处理HTTP协议的各种需求。无论你是想开设自己的餐厅(创建服务器),还是想去别的餐厅点菜(发出请求),HTTP模块都能满足你的需求。
118 18
|
6月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
537 29
|
11月前
|
缓存 JavaScript 安全
nodejs里面的http模块介绍和使用
综上所述,Node.js的http模块是构建Web服务的基础,其灵活性和强大功能,结合Node.js异步非阻塞的特点,为现代Web应用开发提供了坚实的基础。
279 62
|
11月前
使用Netty实现文件传输的HTTP服务器和客户端
本文通过详细的代码示例,展示了如何使用Netty框架实现一个文件传输的HTTP服务器和客户端,包括服务端的文件处理和客户端的文件请求与接收。
232 1
使用Netty实现文件传输的HTTP服务器和客户端
|
12月前
|
前端开发 JavaScript
node反向代理,解决跨域(http-proxy-middleware)
使用node.js和http-proxy-middleware库实现反向代理,解决跨域问题,允许前端请求通过代理访问不同端口的服务。
514 3
|
2月前
|
JavaScript Unix Linux
nvm与node.js的安装指南
通过以上步骤,你可以在各种操作系统上成功安装NVM和Node.js,从而在不同的项目中灵活切换Node.js版本。这种灵活性对于管理不同项目的环境依赖而言是非常重要的。
687 11
|
7月前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。

热门文章

最新文章