使用旧版本curl时,卷曲到localhost端口的连接被拒绝

时间:2019-06-30 22:45:27

标签: curl

我正在尝试对本机上的localhost nodejs express服务器进行卷曲。快递计算机正在运行并且正在侦听端口(4001),并且出于调试目的,我禁用了防火墙。

在我的机器上,我有卷曲为7.61.1的php 7.2.13

但是我正在尝试将我的docker容器php 5.6.40与curl 7.35.0一起使用

当我使用php7和较新的curl打电话时,我得到了答复。

当我使用php5和较旧的curl调用时,出现“连接被拒绝”的信息:

* Hostname was found in DNS cache
* Hostname in DNS cache was stale, zapped
*   Trying 127.0.0.1...
* connect to 127.0.0.1 port 4001 failed: Connection refused
*   Trying ::1...
* Immediate connect fail for ::1: Cannot assign requested address
* Failed to connect to localhost port 4001: Connection refused
* Closing connection 1

这是curl的php代码,两者均相同:

$curl = curl_init();
$verbose = fopen('php://temp', 'w+');

curl_setopt_array($curl, array(
  CURLOPT_PORT => "4001",
  CURLOPT_URL => "http://localhost:4001/api/client/set/141b2cab9352c9adb0edf708dab8937e?=",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_SSL_VERIFYPEER => false,
  CURLOPT_SSL_VERIFYHOST => 0,
  CURLOPT_VERBOSE =>true,
  CURLOPT_STDERR => $verbose,
  CURLOPT_HEADER =>1,  
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_SSLVERSION =>4,
  CURLOPT_CUSTOMREQUEST => "POST",
));


$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err."<br><br>";
    rewind($verbose);
    $verboseLog = stream_get_contents($verbose);
    echo "Verbose information:<br><pre>", htmlspecialchars($verboseLog), "</pre><br>";
}
echo "r:$response<br>";

我试图告诉快递服务器在所有端口上进行侦听,但这没有用:

 server.listen(process.env.HTTP_PORT,'0.0.0.0');

我认为问题仅在开发上,因为真正服务器的卷曲正在生产中

有什么办法可以修复php5.6吗?我现在无法更改为php7,因为生产仍在使用php5.6。

1 个答案:

答案 0 :(得分:0)

我的问题不是curl版本,这是因为我docker容器以桥接网络模式连接到主机,因此它无法使用主机的“ localhost”。要访问在主机上运行的服务,我需要使用主机ip(我从“ ipconfig”获得)。