Node.js勉強中...HTTPリクエストをオウム返しするサーバを作ってみた
注: ほとんどHello World状態です。
ソース
Gistに書きました。
投げられたHTTPリクエストをコンソールに表示します。
あと、レスポンスボディに書き込んで投げ返します。
Node.jsはHTTPリクエストをパースしてhttp.ClientRequestというオブジェクトにしてくれます。
それをわざわざテキスト形式のHTTPリクエスト(のような何か)に戻してます。
ヘッダの頭文字を大文字にしたりはしてません。
あと、HTTPメソッドごとに処理を分けるとか全くやってないです。
使ってみる
起動
Node.jsをインストールして、シェルでnode (スクリプトのパス)
と打つだけ。
$ node test_server.js
Server running at http://127.0.0.1:2501/
Chromeでアクセスしてみる
========== Received Request ========== count: 1
GET / HTTP/1.1
accept-encoding: gzip,deflate,sdch
accept-language: ja,en-US;q=0.8,en;q=0.6
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
connection: keep-alive
host: 127.0.0.1:2501
user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36
========== Received Request ========== count: 2
GET /favicon.ico HTTP/1.1
accept-encoding: gzip,deflate,sdch
accept-language: ja,en-US;q=0.8,en;q=0.6
accept: */*
connection: keep-alive
host: 127.0.0.1:2501
user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36
お気に入りのアイコンを取得するために2回アクセスしてました。
Node.jsでGET/POST
GET
あらゆることをスルーしてGET投げるだけのスクリプト.js
require('http').get('http://127.0.0.1:2501');
GET結果
========== Received Request ========== count: 1
GET / HTTP/1.1
connection: close
host: 127.0.0.1:2501
POST
あらゆることをスルーしてPOST投げるだけのスクリプト.js
require('http').request({hostname:'127.0.0.1', port: 2501, method:'POST'}).end('number=4&name=kurisu');
POST結果
========== Received Request ========== count: 1
POST / HTTP/1.1
connection: close
host: 127.0.0.1:2501
transfer-encoding: chunked
number=4&name=kurisu
********** Parsed Body ********** count: 1
{ number: '4', name: 'kurisu' }
require('http').get('http://127.0.0.1:2501');
========== Received Request ========== count: 1
GET / HTTP/1.1
connection: close
host: 127.0.0.1:2501
require('http').request({hostname:'127.0.0.1', port: 2501, method:'POST'}).end('number=4&name=kurisu');
========== Received Request ========== count: 1
POST / HTTP/1.1
connection: close
host: 127.0.0.1:2501
transfer-encoding: chunked
number=4&name=kurisu
********** Parsed Body ********** count: 1
{ number: '4', name: 'kurisu' }
node -e
でワンライナーにしたかったけど何か動かなかった。
RubyでGET/POST
GET
GET投げるだけのワンライナー
ruby -rnet/http -ruri -e "Net::HTTP.get_print URI.parse('http://127.0.0.1:2501')"
GET結果
========== Received Request ========== count: 1
GET / HTTP/1.1
accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
accept: */*
host: 127.0.0.1:2501
user-agent: Ruby
POST
POST投げるだけのワンライナー
ruby -rnet/http -ruri -e "Net::HTTP.post_form(URI.parse('http://127.0.0.1:2501'), {os:'redmagic', version:4})"
POST結果
========== Received Request ========== count: 1
POST / HTTP/1.1
accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
accept: */*
content-length: 21
content-type: application/x-www-form-urlencoded
host: 127.0.0.1:2501
user-agent: Ruby
os=redmagic&version=4
********** Parsed Body ********** count: 1
{ os: 'redmagic', version: '4' }
ruby -rnet/http -ruri -e "Net::HTTP.get_print URI.parse('http://127.0.0.1:2501')"
========== Received Request ========== count: 1
GET / HTTP/1.1
accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
accept: */*
host: 127.0.0.1:2501
user-agent: Ruby
ruby -rnet/http -ruri -e "Net::HTTP.post_form(URI.parse('http://127.0.0.1:2501'), {os:'redmagic', version:4})"
========== Received Request ========== count: 1
POST / HTTP/1.1
accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
accept: */*
content-length: 21
content-type: application/x-www-form-urlencoded
host: 127.0.0.1:2501
user-agent: Ruby
os=redmagic&version=4
********** Parsed Body ********** count: 1
{ os: 'redmagic', version: '4' }
ユーザエージェントが可愛い。
curlでGET/POST
GET
GET投げるだけ
curl 127.0.0.1:2501
GET結果
========== Received Request ========== count: 1
GET / HTTP/1.1
accept: */*
host: 127.0.0.1:2501
user-agent: curl/7.32.0
POST
POST投げるだけ
curl -F "title=The Perfect Insider" -F "pubDate=1996" 127.0.0.1:2501
POST結果
========== Received Request ========== count: 1
POST / HTTP/1.1
accept: */*
content-length: 259
content-type: multipart/form-data; boundary=------------------------b1e757a1e175746e
expect: 100-continue
host: 127.0.0.1:2501
user-agent: curl/7.32.0
--------------------------b1e757a1e175746e
Content-Disposition: form-data; name="title"
The Perfect Insider
--------------------------b1e757a1e175746e
Content-Disposition: form-data; name="pubDate"
1996
--------------------------b1e757a1e175746e--
********** Parsed Body ********** count: 1
{ '--------------------------b1e757a1e175746e\r\nContent-Disposition: form-data; name': '"title"\r\n\r\nThe Perfect Insider\r\n--------------------------b1e757a1e175746e\r\nContent-Disposition: form-data; name="pubDate"\r\n\r\n1996\r\n--------------------------b1e757a1e175746e--\r\n' }
curl 127.0.0.1:2501
========== Received Request ========== count: 1
GET / HTTP/1.1
accept: */*
host: 127.0.0.1:2501
user-agent: curl/7.32.0
curl -F "title=The Perfect Insider" -F "pubDate=1996" 127.0.0.1:2501
========== Received Request ========== count: 1
POST / HTTP/1.1
accept: */*
content-length: 259
content-type: multipart/form-data; boundary=------------------------b1e757a1e175746e
expect: 100-continue
host: 127.0.0.1:2501
user-agent: curl/7.32.0
--------------------------b1e757a1e175746e
Content-Disposition: form-data; name="title"
The Perfect Insider
--------------------------b1e757a1e175746e
Content-Disposition: form-data; name="pubDate"
1996
--------------------------b1e757a1e175746e--
********** Parsed Body ********** count: 1
{ '--------------------------b1e757a1e175746e\r\nContent-Disposition: form-data; name': '"title"\r\n\r\nThe Perfect Insider\r\n--------------------------b1e757a1e175746e\r\nContent-Disposition: form-data; name="pubDate"\r\n\r\n1996\r\n--------------------------b1e757a1e175746e--\r\n' }
boundaryって初めて知りました。
参考
Author And Source
この問題について(Node.js勉強中...HTTPリクエストをオウム返しするサーバを作ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/zakuroishikuro/items/dd871a5a98e695b9129e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .