我正在运行苏格兰威士忌盒(在Ubuntu VM中运行的流浪汉LAMP堆栈)
我正在Windows上运行node.js.
这是我的node.js代码:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var mysql = require('mysql');
http.listen(3000, function() {
console.log('listening on port *:3000');
});
app.post('/phpreq', function (req, res) {
var content = req.body;
console.log(content);
res.end('ok');
})
这是我的PHP代码:
$data = array("request" => "disconnect", "userid" => "5");
$data_string = json_encode($data);
$ch = curl_init('http://localhost:3000/phpreq');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
echo curl_exec($ch)."\n";
if (curl_errno($ch)) {
die('Couldn\'t send request: ' . curl_error($ch));
}
curl_close($ch);
我收到的错误是:无法发送请求:无法连接到localhost端口3000:拒绝连接
我已尝试禁用防火墙并允许端口3000通过我的防火墙。
如何解决此错误?
答案 0 :(得分:0)
您必须确保连接的端口3000位于正确的主机上。
您可能需要使用网关地址(在来宾操作系统上运行netstat -rn
来查看它是什么),使用localhost以外的本地IP地址以便使用正确的接口,或者使用某种形式的端口转发(从guest 3000到主机3000)。
当您在vagrant框中使用localhost(或127.0.0.1,它是相同的)时,您访问该框上的端口,而不是主机上的端口。
有几种方法可以在Vagrant中配置网络,因此您需要阅读文档并查看它是如何处理的。
请参阅:
答案 1 :(得分:0)
我设法解决了这个问题。我通过在node.js中监听0.0.0.0并使用192.168.33.10(用于cURL发布请求的PHP中的vagrant的IP)来解决它。
我的新node.js代码:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var mysql = require('mysql');
http.listen(3000, function() {
console.log('listening on port *:3000');
});
app.post('/phpreq', function (req, res) {
var content = req.body;
console.log(content);
res.end('ok');
})
新的PHP代码:
$data = array("request" => "disconnect", "userid" => "5");
$data_string = json_encode($data);
$ch = curl_init('http://192.168.33.1:3000/phpreq');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
echo curl_exec($ch)."\n";
if (curl_errno($ch)) {
die('Couldn\'t send request: ' . curl_error($ch));
}
curl_close($ch);