Jsh*_*h0s 3 php api rest 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));
Run Code Online (Sandbox Code Playgroud)
我已经尝试过 (从我的头顶开始,没有特定的顺序)
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);
Run Code Online (Sandbox Code Playgroud)
对于那些使用 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']);
Run Code Online (Sandbox Code Playgroud)
这是一个完整的例子:
$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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4679 次 |
最近记录: |