HTML과 자바스크립트 등으로 구성된 웹 서버 소스가 있을 때, 간단히 테스트용 웹서버 구동하기 (Node.js 사용)

  1. 설치
    npm install -g http-server
    
  2. 실행
    http-server <폴더명>
    


또 다른 방법 (global로 설치 필요없음)

npx http-server <폴더명>
,


사전 설치 요구사항


request 모듈 사용시, 추가적인 request 모듈 설치를 필요로 한다.


npm install request




폼 전송 방법


request.post('http://service.com/upload', {form:{key:'value'}})
// or
request.post('http://service.com/upload').form({key:'value'})
// or
request.post({url:'http://service.com/upload', form: {key:'value'}}, function(err,httpResponse,body){ /* ... */ })




쿠키 저장


로그인 등에서 서버로부터 전달받은 쿠키를 저장하고 이후에 요청에 계속 사용하고 싶을 경우, 아래 방법 중 한가지를 사용한다.


1) 매 요청마다 옵션에 jar: true를 설정


request({
  ...

  jar: true
},
...



2) 요청 전에 디폴트값으로 설정


var request = request.defaults({jar: true})




,


- 텔레그램 봇으로 채널 포스팅 - 2. Node.js 사용 예제 (1)

- [Node.js] HTML 파싱하기 (cheerio 모듈 사용)


위의 두 글을 참고하면 웹페이지의 특정 class에 해당하는 부분을 추출하여 텔레그램 채널로 보내는 것이 가능하다. (두둥)

var http = require('http');
var https = require('https');
var cheerio = require('cheerio');
  
var options = {
    hostname: 'httpbin.org'
  };
  
function handleResponse(response) {
  var serverData = '';
  response.on('data', function (chunk) {
    serverData += chunk;
  });
  response.on('end', function () {
  
    var $ = cheerio.load(serverData);
  
    var result = $(".bash").text();            // 클래스가 bash인 요소를 선택
    var result2 = result.replace(/(^\s+|\s+$)/g, ""); // 앞뒤의 화이트 스페이스를 제거
    console.log("Find by class : bash -> " + result2);
 
    var options2 = {
      hostname: 'api.telegram.org',
      path: '/bot<텔레그램 봇 토큰>/sendMessage',
      method: 'POST',
      headers: {
          'Content-Type': 'application/json',
      }
    };
      
    var req = https.request(options2, function(res) {
      console.log('Status: ' + res.statusCode);
      console.log('Headers: ' + JSON.stringify(res.headers));
      res.setEncoding('utf8');
      res.on('data', function (body) {
        console.log('Body: ' + body);
      });
    });
    req.on('error', function(e) {
      console.log('problem with request: ' + e.message);
    });
      
    req.write(
        '{"chat_id": "@<채널 ID>", "text": "' + result2 + '"}'
    );
    req.end();
 
  });
}
  
http.request(options, function(response){
  handleResponse(response);
}).end();





,


Node.js를 사용하여 텔레그램 채널에 메세지를 보내는 예제입니다.

<텔레그램 봇 토큰>과 <채널 ID> 부분은 아래 글에서 설명했던 값으로 바꿔줍니다.


 -> 텔레그램 봇으로 채널 포스팅 - 1. 준비 작업



var http = require("https");
var options = {
  hostname: 'api.telegram.org',
  path: '/bot<텔레그램 봇 토큰>/sendMessage',
  method: 'POST',
  headers: {
      'Content-Type': 'application/json',
  }
};

var req = http.request(options, function(res) {
  console.log('Status: ' + res.statusCode);
  console.log('Headers: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (body) {
    console.log('Body: ' + body);
  });
});
req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

req.write(
    '{"chat_id": "@<채널 ID>", "text": "test string"}'
);
req.end();



참고 글


 - [Node.js] HTTP 요청하기 (http 모듈 사용)



,


cheerio 모듈을 사용하면, jquery에서 selector를 사용하는 방식으로 HTML을 분석할 수 있다.



사전 설치 요구사항


cheerio 모듈 사용시, 추가적인 cheerio 모듈 설치를 필요로 한다.


npm install cheerio




HTML 파싱 예제


var http = require('http');
var cheerio = require('cheerio');
 
var options = {
    hostname: 'httpbin.org'
  };
 
function handleResponse(response) {
  var serverData = '';
  response.on('data', function (chunk) {
    serverData += chunk;
  });
  response.on('end', function () {
 
    var $ = cheerio.load(serverData);
 
    var result = $(".bash").text();            // 클래스가 bash인 요소를 선택
    var result2 = result.replace(/(^\s+|\s+$)/g, ""); // 앞뒤의 화이트 스페이스를 제거
    console.log("Find by class : bash -> " + result2);
 
    result = $("#AUTHOR").text();                     // id가 AUTHOR인 요소를 선택
    result2 = result.replace(/(^\s+|\s+$)/g, "");     // 앞뒤의 화이트 스페이스를 제거
    console.log("Find by id : AUTHOR -> " + result2);
  });
}
 
http.request(options, function(response){
  handleResponse(response);
}).end();




,


request 모듈 사용시, 추가적인 request 모듈 설치를 필요로 한다.


npm install request



HTTP 요청하기


var request = require('request');

request({
    url: 'http://httpbin.org/ip',
}, function(err, res, html) {
    if (err) {
        console.log(err);
        return;
    }

    console.log("received server data:");
    console.log(html);
});


참고 사항


 - https 접속을 위해서는 url 안에 직접 'https://~'와 같은 형식으로 입력하면 된다.


 - 헤더 정의가 필요할 경우, 아래와 같이 추가한다.


request({
  ...


  headers: {

    'Content-Type': 'text/html'
  }
},
...





,


기본 HTTP 요청하기


var http = require('http');
var options = {
    hostname: 'httpbin.org',
    path: '/ip'
  };

function handleResponse(response) {
  var serverData = '';
  response.on('data', function (chunk) {
    serverData += chunk;
  });
  response.on('end', function () {
    console.log("received server data:");
    console.log(serverData);
  });
}

http.request(options, function(response){
  handleResponse(response);
}).end();



참고 사항


 - 접속 옵션 지정시, URL 중 호스트명은 hostname에, 세부 하위 경로는 path에 들어간다.


 - https 접속을 하려면, http 모듈 대신에 https 모듈을 사용하면 된다.


var http = require("https");


 - 특정 포트 지정시는 아래와 같이 추가한다.


var options = {

  ...

  port: '4242'

  };




POST 요청하기


var http = require("http");
var options = {
  hostname: 'httpbin.org',
  path: '/post',
  method: 'POST',
  headers: {
    'Content-Type': 'text/html',
  }
};

var req = http.request(options, function(res) {
  console.log('Status: ' + res.statusCode);
  console.log('Headers: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (body) {
    console.log('Body: ' + body);
  });
});
req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

req.write(
    '{"text": "test string"}'
);
req.end();




참고 사이트


 - http://httpbin.org : 각종 HTTP 요청들에 대한 응답을 테스트할 수 있는 사이트



,

Node.js는 일반적인 자바스크립트가 웹 브라우저에서 구동되는 것과는 달리, 인터프리터 언어와 같은 방식으로 데스크탑 혹은 서버에서 자바스크립트를 동작시킬 수 있는 자바스크립트 런타임이다. Chrome V8 자바스크립트 엔진을 기반으로 하고 있다.


설치


1. https://nodejs.org 에서 최신 버전을 다운받아 설치한다.



테스트


1. 다음의 내용을 hello.js 파일로 저장한다.


console.log('Hello Node.js!');


2. 위의 파일을 실행해본다.


node hello.js



참고 사이트


 - https://nodejs.org/ko/


 - http://www.tutorialspoint.com/nodejs/




<테스트 환경>

OS : Windows 7

Node.js 버전 : v4.5.0 LTS



,