Skip to content

Instantly share code, notes, and snippets.

@yangfch3
Forked from TooTallNate/bbs.js
Last active August 23, 2018 01:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save yangfch3/0da32310826864685ef150a36c14b017 to your computer and use it in GitHub Desktop.
Save yangfch3/0da32310826864685ef150a36c14b017 to your computer and use it in GitHub Desktop.
使用 repl 模块搭建一个面向 curl 的 SREPL
/**
* Requires node v0.7.7 or greater.
*
* To connect: $ curl -sSNT. localhost:8000
*/
var http = require('http')
, repl = require('repl')
, buf0 = new Buffer([0])
var server = http.createServer(function (req, res) {
res.setHeader('content-type', 'multipart/octet-stream')
res.write('Welcome to the Fun House\r\n')
repl.start({
prompt: 'curl repl> '
, input: req
, output: res
, terminal: false
, useColors: true
, useGlobal: false
})
// log
console.log(req.headers['user-agent'])
// hack to thread stdin and stdout
// simultaneously in curl's single thread
var iv = setInterval(function () {
res.write(buf0)
}, 100)
res.connection.on('end', function () {
clearInterval(iv)
})
})
server.listen(8000)
// ☮ ~ (master) ⚡ curl -sSNT. localhost:8000
// Welcome to the Fun House
// curl repl> process.platform
// 'darwin'
// curl repl> process.arch
// 'x64'
// curl repl> process.cwd()
// '/Users/nrajlich'
// curl repl> path
// { resolve: [Function],
// normalize: [Function],
// join: [Function],
// relative: [Function],
// dirname: [Function],
// basename: [Function],
// extname: [Function],
// _makeLong: [Function] }
// curl repl> ^C
// ☮ ~ (master) ⚡
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment