PHP-curl本地主机连接被拒绝

时间:2020-02-04 02:33:49

标签: php rest api curl localhost

说明

我用Java(GET)制作了一个简单的REST api。

  • 邮递员工作(本地主机和IPv4)

  • 命令行中
  • curl的工作原理(本地主机和IPv4)

  • 来自其他城市的外部请求有效(IPv4)


期望

要让PHP curl在本地主机上工作

实际

由于某些原因,IPv4上的PHP curl可以工作,但是localhost不起作用


PHP curl输出错误

  • 无法连接到本地主机端口8080:连接被拒绝

  • 卷曲错误:7


代码

$url = 'http://localhost:8080/api/user';
$curl = curl_init($url);
echo json_decode(curl_exec($curl));

我尝试过 (从我的头顶开始,没有特定顺序)

curl_setopt ($curl, CURLOPT_PORT , 8080);
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

3 个答案:

答案 0 :(得分:1)

对于那些使用Docker,Vargant等的人。

您收到Failed to connect to localhost port 8080: Connection refused错误,因为您尝试从虚拟机(例如Docker)内部连接到localhost:8080,因此该主机在Docker容器内不可用,因此您应添加一个代理可以从外面到达端口。

要解决此问题,请在curl_init()之后添加下一行代码:

curl_setopt($ch, CURLOPT_PROXY, $_SERVER['SERVER_ADDR'] . ':' .  $_SERVER['SERVER_PORT']);

这是一个完整的例子:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $APIUrl);

if ($_SERVER['HTTP_HOST'] == 'localhost:8080') {
    // Proxy for Docker
    curl_setopt($ch, CURLOPT_PROXY, $_SERVER['SERVER_ADDR'] . ':' .  $_SERVER['SERVER_PORT']);
}

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

if (curl_errno($ch)) {
    $error = curl_error($ch);
}

curl_close($ch);

答案 1 :(得分:0)

我不确定这是否可以作为答案,但是我刚刚重新启动了Linux VM,现在它可以正常工作了。

答案 2 :(得分:0)

不确定它是否仍然对您有用,但是我面临几乎相同的问题。我已经使用php -S localhost:5500或VS代码扩展来启动php服务器,并尝试通过curl连接到同一主机,这几乎花费了无限时间而没有任何响应。解决方案很简单(如果您了解俄语,或者可以使用翻译器,则可以找到全文here)。 因此,从本文开始:

此脚本不适用于默认的WPN-XM v0.8.6设置,因为在后台仅侦听一个php -C gi进程,但是您的示例(至少)需要两个。发出curl请求的脚本已经在使用php -C gi,因此Nginx无法将其重定向到php -C gi。这意味着您将首先遇到带有加载指示器的空白页面,然后删除连接超时。 主要问题是php -C gi不会自动产生新进程(如果需要)。这里讨论了这个问题:https://github.com/WPN-XM/WPN-XM/issues/323

所以对我来说,解决方案是创建另一个具有不同端口(例如5500和5550)的php服务器,一切都开始工作。