小编Nik*_*lov的帖子

简单的node.js代理通过将http服务器传递给http请求

尝试通过创建一个简单的http代理服务器来了解有关node.js的更多信息.使用场景很简单:用户 - >代理 - >服务器 - >代理 - >用户

以下代码一直有效,直到最后一步.无法找到管道连接器输出回用户的方法.

#!/usr/bin/env node

var
    url = require('url'),
    http = require('http'),
    acceptor = http.createServer().listen(3128);

acceptor.on('request', function(request, response) {
    console.log('request ' + request.url);
    request.pause();
    var options = url.parse(request.url);
    options.headers = request.headers;
    options.method = request.method;
    options.agent = false;

    var connector = http.request(options);
    request.pipe(connector);
    request.resume();
//  connector.pipe(response); // doesn't work
//  connector.pipe(request); // doesn't work either
});
Run Code Online (Sandbox Code Playgroud)

使用tcpflow我看到来自浏览器的传入请求,然后是传出代理请求,然后是服务器响应回代理.不知何故,我无法将响应重新传输回浏览器.

使用管道实现此逻辑的正确方法是什么?

proxy http node.js

14
推荐指数
3
解决办法
3万
查看次数

两个多字节二进制数据变量之间的最快按位xor

实现以下逻辑的最快方法是什么:

def xor(data, key):
    l = len(key)

    buff = ""
    for i in range(0, len(data)):
        buff += chr(ord(data[i]) ^ ord(key[i % l]))
    return buff
Run Code Online (Sandbox Code Playgroud)

在我的情况下,密钥是20字节的sha1摘要,数据是20字节和几(1,2,3)兆字节之间的一些二进制数据

更新:

好,朋友们.这是一个快3.5倍的实现,它将数据和密钥分成4个,2个或1个字节(在我的情况下,大多数情况下它是4字节长整数):

def xor(data, key):
    index = len(data) % 4
    size = (4, 1, 2, 1)[index]
    type = ('L', 'B', 'H', 'B')[index]
    key_len = len(key)/size
    data_len = len(data)/size
    key_fmt = "<" + str(key_len) + type;
    data_fmt = "<" + str(data_len) + type;

    key_list = struct.unpack(key_fmt, key)
    data_list = struct.unpack(data_fmt, data)

    result …
Run Code Online (Sandbox Code Playgroud)

python bitwise-operators multibyte

12
推荐指数
1
解决办法
6810
查看次数

如何在node.js下setsockopt?

node.js中是否有类似setsockopt/getsockopt的套接字选项操作功能?

sockets node.js

3
推荐指数
1
解决办法
2122
查看次数

标签 统计

node.js ×2

bitwise-operators ×1

http ×1

multibyte ×1

proxy ×1

python ×1

sockets ×1