nodejs通过代理(proxy)发送http请求(request)

本文介绍如何使用Node.js通过HTTP代理服务器发起HTTPS请求。通过示例代码展示配置代理及处理响应的过程,包括处理302重定向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有可能有这样的需求,需要node作为web服务器通过另外一台http/https代理服务器发http或者https请求,废话不多说直接上代码大家都懂的:


var http = require('http')
var opt = {
 host:'这里放代理服务器的ip或者域名',
 port:'这里放代理服务器的端口号',
 method:'POST',//这里是发送的方法
 path:' https://www.google.com',     //这里是访问的路径
 headers:{
  //这里放期望发送出去的请求头
 }
}
//以下是接受数据的代码
var body = '';
var req = http.request(opt, function(res) {
  console.log("Got response: " + res.statusCode);
  res.on('data',function(d){
  body += d;
 }).on('end', function(){
  console.log(res.headers)
  console.log(body)
 });

}).on('error', function(e) {
  console.log("Got error: " + e.message);
})
req.end();
这样我们就通过了指定代理服务器发出了https的请求,注意这里我们同代理服务器是http协议的,不是https,返回的结果当然肯定会根据你的代理服务器不同有所不同。


Got response: 302
{ location: 'https://www.google.com.tw/',
  'cache-control': 'private',
  'content-type': 'text/html; charset=UTF-8',
  'set-cookie': 
   [ 'PREF=ID=b3cfcb24798a7a07:FF=0:TM=1356078097:LM=1356078097:S=v_3qEd0_gCW6-xum; expires=Sun, 21-Dec-2014 08:21:37 GMT; path=/; domain=.google.com',
     'NID=67=qoJf_z3W7KlibpNZ6xld__r0rYGyYu7l_XiDQmZ3anjBFadDzhijME3QcX651yucne_irK_2JMS8HF5FuxNl85mE0nDrtn9Iq0z2gW69n00OrB970hpHTbYe0mAogZit; expires=Sat, 22-Jun-2013 08:21:37 GMT; path=/; domain=.google.com; HttpOnly' ],
  p3p: 'CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."',
  date: 'Fri, 21 Dec 2012 08:21:37 GMT',
  server: 'gws',
  'content-length': '223',
  'x-xss-protection': '1; mode=block',
  'x-frame-options': 'SAMEORIGIN',
  via: '1.0 ***.****.com:80 (squid/2.6.STABLE21)',
  'proxy-connection': 'keep-alive' }
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.com.tw/">here</A>.
</BODY></HTML>

谷歌返回了一个302,告诉我们进行跳转,需要访问 https://www.google.com.tw/ 这个地址 博客原文: http://snoopyxdy.blog.163.com/blog/static/60117440201211214207539/
在Node.js中进行网络请求时,可以使用http_proxy代理请求http_proxy是一个用于发送HTTP请求代理服务器,它既可以用于转发请求到目标服务器,也可以用于缓存响应等操作。 在使用http_proxy发送网络请求前,需要先安装相应的模块。常用的模块有http-proxyrequest-promise。安装命令分别为: ```shell npm install http-proxy npm install request-promise ``` 安装完成后,可以根据需要选择合适的模块进行使用。 使用http-proxy模块的示例代码如下: ```javascript const httpProxy = require('http-proxy'); // 创建代理服务器 const proxy = httpProxy.createProxyServer({}); // 监听目标服务器的响应 proxy.on('proxyRes', (proxyRes, req, res) => { console.log('Received response from target server'); }); // 监听客户端请求 const server = require('http').createServer((req, res) => { // 设置目标服务器地址 const targetUrl = 'http://example.com'; // 发送代理请求 proxy.web(req, res, { target: targetUrl }); }); // 启动代理服务器 server.listen(3000, () => { console.log('Proxy server is running on port 3000'); }); ``` 以上代码创建了一个代理服务器,监听本地的3000端口。当收到客户端的请求时,将请求转发给指定的目标服务器,然后将目标服务器的响应返回给客户端。 如果想要进行更高级的网络请求操作,可以使用request-promise模块。示例代码如下: ```javascript const request = require('request-promise'); async function makeRequest() { const targetUrl = 'http://example.com'; // 发送代理请求 const response = await request.get({ url: targetUrl, proxy: 'http://proxy.example.com:8080' // 设置代理服务器地址 }); console.log(response); } makeRequest(); ``` 以上代码使用request-promise模块发送了一个GET请求,并设置了代理服务器地址。 总结来说,Node.js中可以使用http_proxy来实现网络请求代理功能,可以根据需求选择合适的模块进行使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值