当前位置: 首页 > Web前端 > HTML5

使用http-proxy代理网络请求

时间:2023-04-04 23:48:40 HTML5

使用如下简单代码代理网络请求:consthttp=require('http');consthttpProxy=require('http-proxy');consttargetUrl='https://www.sap.cn/index.html';constproxy=httpProxy.createProxyServer({target:targetUrl,});http.createServer(function(req,res){proxy.web(req,res);})。listen(8089);console.log('代理监听8089');这段代码的语义是创建一个监听8089端口的代理HTTP服务器。因此,代理服务器会自动将任何发送到8089端口的HTTP请求发送到targetUrl指定的sap网站。我们从命令行启动此服务器:nodeserver.js遇到以下错误消息:错误[ERR_TLS_CERT_ALTNAME_INVALID]:主机名/IP与证书的altnames不匹配:主机:localhost。不在证书的别名中:DNS:www.sap.cnDetails调用栈:在Object.checkServerIdentity(tls.js:297:12)在TLSSocket.onConnectSecure(_tls_wrap.js:1507:27)在TLSSocket.emit(events.js:315:20)atTLSSocket._finishInit(_tls_wrap.js:932:8)atTLSWrap.ssl.onhandshakedone(_tls_wrap.js:706:12){原因:“主机:localhost。不在证书的替代名称中:DNS:www.sap.cn",host:'localhost',cert:{subject:[Object:nullprototype]{C:'DE',L:'Walldorf',O:'SAPSE',CN:'www.sap.cn'},当我们使用SSL连接到服务器时,服务器做的第一件事是提供一个证书,上面写着我是api.dropbox.com。一个证书有一个主题,那个主题有一个CN(CommonName,CommonName的缩写)。证书也可以有一个或多个subjectAltNames。当node.js连接到服务器时,node.js获取此证书,然后验证它认为连接到的域名(api.dropbox.com)是否与主题的CN或其备用名称之一匹配。请注意,在节点0.10.x中,如果使用IP连接,IP地址必须在altnames中-node.js不会尝试根据CN验证IP。虽然错误是关于SSL证书和域名不匹配,但在http-proxy模块中,这通常发生在您的服务器是HTTP而目标是HTTPS时。去这个开发包的官网查找原因。使用以下代码捕获错误:proxy.on('error',function(e){...});当请求被代理时,它遵循两个不同的管道,将转换应用于req和res对象。第一个管道(传入)负责创建和操作将客户端连接到目标的流。第二个管道(传出)负责创建和操作将数据从目标返回到客户端的流。在创建时添加secure:false选项,问题消失: