【问题标题】:How to use CURL to send data for Wordpress如何使用 CURL 为 Wordpress 发送数据
【发布时间】:2016-02-18 15:50:54
【问题描述】:

我想将数据从一个 WP 站点发送到另一个站点。 我有两个插件,发送者和接收者。 在发送方我使用了初始化钩子

add_action('init', array($this, 'say_hello') );

....

public function say_hello() {
$data = get_plugin_data( $this->pDIR.'/plugin.php', $markup = false, $translate = false );

$url = $_SERVER['HTTP_HOST'].'/wp-admin/admin-ajax.php';

$fields = array(
          'action' => 'Hello_ajax',
          'zpm_hello' => '1',
          'zpm_plugin_version' => $data['Version'],
          'zpm_host' => $_SERVER['HTTP_HOST']
);

foreach($fields as $key=>$value) { 
        $fields_string .= $key.'='.$value.'&'; 
}
rtrim($fields_string, '&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//execute post
$result = curl_exec($ch);
var_dump($result);
//close connection
curl_close($ch);

}

变量很好,我打印出来的 url 是正确的。 在接收方我注册了 admin ajax

add_action('wp_ajax_Hello_ajax', array($this, 'zpm_api_hello'));
add_action('wp_ajax_nopriv_Hello_ajax', array($this, 'zpm_api_hello'));

public function zpm_api_hello() {
    $response['success'] = false;
    $response['response'] = "";
    $error = false;

    $hello          = $_POST['zpm_hello'];
    $plugin_version = $_POST['zpm_plugin_version'];
    $plugin_host    = $_POST['zpm_host'];

    if(!isset($hello)) {
        $error = true;
        $response['response'] .= "Ello >> Auth ERROR - CODE - 01 ";
    } 

    if(!isset($plugin_version)) {
        $error = true;
        $response['response'] .= "Ello >> Plugin Version error - CODE - 02 ";
    }

    if(!isset($plugin_host)) {
        $error = true;
        $response['response'] .= "Ello >> Plugin host error - CODE - 03 ";
    }


    if(!$error) {
        $response['success'] = true;
        $response['response'] .= "Ello >> Auth OK ";
    }

    echo json_encode($response);
    die();
}

所以代码在这里。 我的问题是当我尝试加载发件人站点时,它只是永远加载和加载,我没有得到结果。你能告诉我这种方法可能有什么问题吗?感谢您的所有回答!

【问题讨论】:

    标签: php wordpress curl


    【解决方案1】:

    您可能想使用此示例来构建您的 PHP 请求,如果您将 POST 正文、标头和 url 参数发送给我,我什至会为您构建它:

    <?php
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => "http://example.com//wp-admin/admin-ajax.php",
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => "blakey=blaval",
      CURLOPT_HTTPHEADER => array(
        "action: Hello_ajax",
        "cache-control: no-cache",
        "content-type: application/x-www-form-urlencoded",
        "postman-token: fd5bcc0b-f46d-0cf8-a5cf-dc83bfe7dbec",
        "zpm_hello: 1"
      ),
    ));
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
    }
    

    【讨论】:

    • 感谢您的回答,我使用了这个底座,现在可以了。
    • @Thomas - 你能详细说明这里有什么邮递员令牌以及我如何获得它吗?我正在尝试向 admin-ajax.php 发出 curl 请求,但没有得到任何响应,我假设这是一个身份验证问题,我想知道这是否是关键。非常感谢
    • @DaveEssery 你不需要邮递员令牌,这是我使用邮递员的一个例子(一个有用的 api 调试工具)。我认为您的问题出在其他地方。请创建您自己的问题,您可能会得到帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 2013-04-06
    相关资源
    最近更新 更多