你如何在wordpress插件中使用curl?

时间:2011-01-26 01:37:40

标签: php wordpress curl wordpress-plugin

我正在创建一个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); 
 } 

2 个答案:

答案 0 :(得分:12)

你不应该在WordPress插件中使用CURL。

而是使用wp_函数发出HTTP请求,例如

function wp_plugin_event_handler () {
    $url = 'http://your-end-point';  
    $foo = 'bar';
    $post_data = array(
         'email' => urlencode($foo));

    $result = wp_remote_post( $url, array( 'body' => $post_data ) );
}

add_action("wp_plugin_event", "wp_plugin_event_handler");

过去我遇到过WordPress插件事件处理程序会挂起CURL的问题。使用WP_函数改为按预期工作。

答案 1 :(得分:3)

博客的管理部分当然是受密码保护的。您需要传递身份验证数据。查找http身份验证以获取详细信息具体来看:

http://www.php.net/manual/en/function.curl-setopt.php

您需要设置CURLOPT_USERPWD选项,并可能设置CURLOPT_HTTPAUTH。