如何使用Node.js发出外部HTTP请求


84

问题很简单。我想使用Node.js服务器作为代理来记录,认证HTTP查询并将其转发到后端HTTP服务器(PUT,GET和DELETE请求)。

我应该为此使用哪个库?恐怕找不到。

Answers:


136

NodeJS支持将http.request作为标准模块:http ://nodejs.org/docs/v0.4.11/api/http.html#http.request

var http = require('http');

var options = {
  host: 'example.com',
  port: 80,
  path: '/foo.html'
};

http.get(options, function(resp){
  resp.on('data', function(chunk){
    //do something with chunk
  });
}).on("error", function(e){
  console.log("Got error: " + e.message);
});

10
我建议添加resp.setEncoding('utf8');(或使用任何编码)以utf8字符串形式获取数据。如果我没看错的话,否则将获得Buffer对象,并且如果将多字节字符拆分为两个块,可能会遇到多字节字符的麻烦。(只是调试了一段时间的相关问题)
Touko 2014年

8
实际上,我已经开始更多地使用requestnpm模块。
chovy

7

我将结合使用node-http-proxyexpress

node-http-proxy将通过以下方式在您的node.js Web服务器内部支持代理RoutingProxy(请参阅示例,该示例称为另一个HTTP服务器中的代理请求)。

在自定义服务器逻辑中,您可以使用express进行身份验证。有关示例,请参见此处auth示例

结合这两个示例,您将获得所需的内容。


5

您可以使用内置http模块执行http.request()

但是,如果您想简化API,则可以使用诸如superagent之类的模块


3
确实更精明的api。我不怪节点仅提供底层API,但是开始处理大块数据只是令人讨厌。
Laurent Bourgault-Roy

1

正如上面@hross所建议的那样,node-http-proxy是一个很好的解决方案。如果您对使用节点没有犹豫,可以使用NGINX来做同样的事情。它与node配合得很好。例如,我们使用它来处理SSL请求,然后再将其转发到节点。它还可以处理缓存和转发路由。好极了!


0

您可以使用node.js http模块来执行此操作。您可以在Node.js HTTP上查看文档。

您还需要将查询字符串传递给其他HTTP Server。您应该在ServerRequest.url中拥有它。

掌握这些信息后,您可以在后端HTTP服务器和端口中传递您将在 http.request()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.