【发布时间】:2011-01-26 01:37:40
【问题描述】:
我正在创建一个 wordpress 插件,但无法让 cURL 调用正常运行。
假设我有一个页面 www.domain.com/wp-admin/admin.php?page=orders
在订单页面中,我有一个函数可以查看是否单击了按钮,如果是,则需要对同一页面进行 cURL 调用(www.domain.com/wp-admin/admin.php?page =orders&dosomething=true) 来启动不同的功能。我这样做的原因是我可以让这个 cURL 调用异步。
我没有收到任何错误,但也没有收到任何回复。如果我将我的网址更改为 google.com 或 example.com,我会收到回复。是否存在身份验证问题或类似性质的问题?
我的代码看起来像这样。我使用gets、echos,而不是为了便于测试而进行异步。
if(isset($_POST['somebutton']))
{
curlRequest("http://www.domain.com/wp-admin/admin.php?page=orders&dosomething=true");
}
if($_GET['dosomething'] == "true")
{
echo("do something");
exit;
}
function curlRequest($url) {
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
return($response);
}
【问题讨论】:
-
您需要能够通过环回接口路由到您的网络服务器。也许 Web 服务器已配置为仅侦听“公共”IP,而不是诸如 127.0.0.1 之类的环回地址。我建议在脚本中尝试像
system("ping www.domain.com")这样愚蠢的东西,看看你是否可以“内部”路由到主机。 -
如果我只是去 wordpress 的公共部分,curl 就可以工作。又名 www.domain.com。但是,如果我尝试联系管理员 (wp-admin),它不会给出响应。
-
如果您正在寻找异步进程,为什么不使用 ajax? cURL 是 同步的(即你的 php 脚本会阻塞直到 cURL 完成)。
-
有一种方法可以使 cURL 不总是同步的。我以为我会通过使用 AJAX 获得相同的结果,但它看起来确实有效.. 谢谢