我可以对同一台服务器执行 CURL 请求吗?

2022-08-30 15:11:17

我需要实现一种方法来对位于同一服务器或另一台服务器中的页面进行POST调用。我们不能使用 include,因为我们调用的文件通常调用不同的数据库或具有同名的函数。

我一直在尝试使用curl来实现这一点,虽然它在从另一台服务器调用文件时可以完美地工作,但在调用文件所在的同一服务器时,我绝对没有得到任何东西。

编辑以添加一些代码:我正在做的简化版本:

文件1.php

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "www.myserver.com/File2.php");
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>

文件2.php

<?php
echo "I'M IN!!";
?>

调用File1.php后,我什么也没得到,但是如果File2.php在另一台服务器中,那么我得到一个结果。有什么帮助吗?

我尝试同时使用服务器 URL (http...) 和文件的总地址 (/home/wwww....)


答案 1

请注意,如果您向自己的站点发出 CURL 请求,并且您使用的是默认会话处理程序,并且您通过 CURL 请求的页面使用与生成请求的页面相同的会话,则会遇到死锁情况。

默认会话处理程序在页面请求期间锁定会话文件。当您尝试使用相同的会话请求另一个页面时,该后续请求将挂起,直到请求超时或会话文件变为可用。由于您正在执行内部 CURL,因此运行 CURL 的脚本将锁定会话文件,并且 CURL 请求永远无法完成,因为目标页面永远无法加载会话。


答案 2

因为当您尝试使用公共IP向本地服务器请求时,apache无法解析为其本地域。因此,您必须检查哪个本地ip apache用于该域。然后,您需要编辑 /etc/hosts 文件,并使用本地 ip 和您的域添加新行。例如:

我在apache虚拟主机中该域的本地IP是:172.190.1.120,我的域 mydomain.com 所以我将添加:

172.190.1.120 mydomain.com

然后你的卷发会正常工作。


推荐