* HTTP Request는 다음과 같이 보낼 수 있다.
var http=require('http'); var options={ host:"www.google.com", port:80, path:"/index.html" }; http.get(options,function(res){ console.log('Got response:'+res.statusCode); }); |
- http.get 메소드의 options값으로는 다음의 파라미터를 설정 가능하다.
1) host
2) port
3) method : GET(옵션으로 설정이 안되어 있으면 Default Method), POST, PUT, DELETE, HEAD
4) path
5) headers : request의 헤더값이다. 예를 들어 다음과 같이 설정 가능하다.
{ "Accespt":"text/json","If-Modified-Since":"Mon, 4, Feb, 2013 00:00:10 GMT"}
- http.get은 http.request의 다른 형태이다. 위 코드는 다음과 같이 바꿀수 있다.
var http=require('http'); var options={ host:"www.google.com", port:80, path:"/index.html" }; var request=http.request(options,function(res){ console.log('Get Status:',res.statusCode); }); request.end(); |
- http.request는 ClientRequest 객체를 넘겨주고 write() 함수로 BODY Message를 출력할 수 있다. 또한 'data' event listener를 등록함으로써 request에 대한 데이터를 전송 받을 수 있다.
- http.request로 전달 받는 response는 다음과 같은 객체를 가진다.
1) response.statusCode
2) response.httpVersion
3) response.headers
- response body는 pipe를 이용하여 streaming이 가능하다.다음은 그 예제 및 실행 결과이다.
var http=require('http'); var fs=require('fs'); var options={ host:"www.google.com", port:80, path:"/", method:"GET" }; var file=fs.createWriteStream('./ex1302042.txt'); http.request(options,function(res){ res.pipe(file); }).end(); |
- clientRequest는 새로운 connection이 맺어지면 socket event를 발생시킨다. 요청이 처리가 완료되면 socket은 agent의 pool에서 제거되며 close 또는 agentRemove event를 발생시킨다. 만약 request에 대한 socket을 open 하고 싶으면 agentRemove를 다음과 같이 emit 해서 처리 가능하다.
var req=http.request(options,handleResponseCallback);
req.on('socket',function(socket){
socket.emt('agentRemove');
});
- agent socket은 기본적으로 하나의 주어진 프로세스에서 하나의 호스트/포트 당 5개가 주어진다. agent socket pooling을 비활성화 시키려면 options에 agent:false 를 설정하면 되며 agent pooling 개수를 늘리려면 http.Agent.defaultMaxSockets=10; 과 같이 처리할 수 있다.
* 그 외에 3rd Party 모듈도 이용 가능하다. (예: npm install request)
var = request(require('request');
request('http://aaaaaaa',function(err,res,body){
if(err){throw err;}
console.log(res.statusCode)
console.log(JSON.parse(body)
});
- 다른 메소드는 request.get, request.put, request.post, request.del 로 전송 가능하다.
- Request Body를 encoding 가능하며 options에 form에 대한 정보를 전달 가능하다.
var body={a:1,b:2};
var options={
url:'http://aaaaaa',
form:body
};
request(options, function(err,res.body){
.....
console.log(JSON.parse(body));
});
이럴 경우 a=1&b=2 형태로 body가 전달된다. options의 form을 json으로 변경하면 {a:1,b:2} 로 전달된다.
- request 는 client request object를 리턴하고 client request object 는 writable stream으로 pipe가 가능하다.
var fs=require('fs');
var request=request('request');
var file=fs.createWriteStream('/path/to/my/file');
request.get('http://aaaaa').pipe(file);