Authentication over CURL

时间:2014-06-05 作者:somebodysomewhere

我正在为WordPress网站开发API。基本上,外部应用程序(不是使用WP创建的)能够将JSON发送到我创建的文件中(api.php) 在该文件中,我加载WP(使用wp-load.php), 并基于收到的JSON创建一个post(自定义post类型)。

当我看到这段代码时。。。

$formation_fr = wp_insert_post( array(
    \'post_type\' => \'formation\',
    \'post_title\' => \'example post\',
    \'post_status\' => \'publish\',
    \'post_author\' => 2 // This is an admin account associated with this ID
) );
。。。帖子被创建,除了post_author (相反,这篇文章没有作者)。但是,发送CURL请求的外部应用程序将收到以下内容:

Error: call to URL http://domain.com/api/api.php failed with status 500, response

Alors, on triche ?
, curl_error , curl_errno 0`
“阿洛尔,在特里奇?”错误是“作弊”呃法语错误。WordPress出于某种原因认为我在试图规避功能。

如果我尝试使用此代码块以编程方式登录用户(ID:2)。。。

private function login( $id )
{
    $wp_account = get_user_by( \'id\', $id );
    $username = $wp_account->data->user_login;
    wp_set_current_user( $wp_account->ID );
    wp_set_auth_cookie( $wp_account->ID );
    do_action(\'wp_login\', $username );
}
。。。然后我得到这个:

Error: call to URL http://domain.com/api/api.php failed with status 500, response , curl_error , curl_errno 0
这与上面的错误基本相同,但没有“作弊”这个词。但我没想到这会起作用,因为一块饼干不会影响卷曲连接。

那么,在处理CURL时,如何避免遇到性能错误呢?我用过wp_insert_post() 以前有很多次,从来没有过这个问题。我的临时黑客解决方案是删除wp_die() 函数,它显然修复了该问题。

WordPress版本为3.9.1

1 个回复
最合适的回答,由SO网友:somebodysomewhere 整理而成

我自己找到了答案,我会把它贴在这里,以防其他人有这个问题。基本上在WP 3.9.1中,wp_insert_post() 检查当前登录用户的帐户功能(至少我假设是这样)。因为我是通过cURL连接的,所以没有登录的用户,所以功能检查失败。我所要做的就是发送WP使用的cookie来记住登录的用户:

$curl = curl_init( \'http://www.domain.com\' );
$login_cookie = \'wordpress_logged_in_[hash]=xxx\'; // This cookie can be found once a user is logged in.
curl_setopt( $curl, CURLOPT_COOKIE, $login_cookie );
因此,我只需为我的外部应用程序设置一个新的管理员帐户,将其作为该帐户记录(使用/wp admin),复制wp为我创建的cookie,并将其添加到我的应用程序中。

结束

相关推荐

Have_Posts()执行失败

我想创建一个循环,在搜索中显示搜索结果。php文件。我遵循了WordPress Codex教程中的所有说明,该教程位于:https://codex.wordpress.org/The_Loop我在页面上实现了建议的代码,如下所示:<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php endwhile; else: ?> <p><?php _e(\'Sorr