Php 您可以使用curl向wordpress发送登录post请求吗?

Php 您可以使用curl向wordpress发送登录post请求吗?,php,wordpress,curl,Php,Wordpress,Curl,我目前正在尝试设置一种远程登录wordpress的方式,我不确定我是否能做到这一点,或者这是可能的,但这似乎是我读过的一些东西 我使用下面的代码: // Get cURL resource $curl = curl_init(); // Set some options - we are passing in a useragent too here curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, C

我目前正在尝试设置一种远程登录wordpress的方式,我不确定我是否能做到这一点,或者这是可能的,但这似乎是我读过的一些东西

我使用下面的代码:

// Get cURL resource
$curl = curl_init();
// Set some options - we are passing in a useragent too here
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://example.com/wp-login.php',
    CURLOPT_USERAGENT => 'Codular Sample cURL Request',
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => array(
        'log' => 'username',
        'pwd' => 'password',
        'wp-submit' => 'Log In',
        'redirect_to' => 'http://example.com/wp-admin/',
        'testcookie' => 1
    )
));
// Send the request & save response to $resp
$resp = curl_exec($curl);
die(var_dump($resp));

// Close request to clear up some resources
curl_close($curl);
当我死了,var_dump它时,页面只返回这个,别的什么也不返回:
string(0)“
仅此而已

但是,当我从curl请求中删除“pwd”字段时,它会返回登录页面,并显示一条错误消息,说明密码字段中的密码丢失

编辑

成功登录时出现新错误:

错误:浏览器阻止或不支持cookie。你必须 启用Cookie以使用WordPress


我不知道这是什么,也不知道它为什么这么做,我认为WordPress不允许你这么做,因为它缺少安全提示或参考页面

我的建议是安装/开发一个支持远程登录的插件,然后根据插件结构将登录请求发送到您的网站

您可以使用以下功能进行自动登录

function auto_login( $username ) {
    // log in automatically
    if ( !is_user_logged_in() ) {
        $user = get_userdatabylogin( $username );
        $user_id = $user->ID;
        wp_set_current_user( $user_id, $user_login );
        wp_set_auth_cookie( $user_id );
        do_action( 'wp_login', $user_login );
    }     
}
那么,您需要的是如下所示:

auto_login('admin');

希望能有所帮助。

我认为WordPress不允许您这样做,因为缺少安全提示或推荐页面

我的建议是安装/开发一个支持远程登录的插件,然后根据插件结构将登录请求发送到您的网站

您可以使用以下功能进行自动登录

function auto_login( $username ) {
    // log in automatically
    if ( !is_user_logged_in() ) {
        $user = get_userdatabylogin( $username );
        $user_id = $user->ID;
        wp_set_current_user( $user_id, $user_login );
        wp_set_auth_cookie( $user_id );
        do_action( 'wp_login', $user_login );
    }     
}
那么,您需要的是如下所示:

auto_login('admin');

希望有帮助。

我无法使用cURL登录,但我可以使用下面的代码以更简单的方式进行操作

<html>

<head>

    <title>Crunchify Login Page</title>
    <script>
        function loginForm() {
            document.myform.submit();
            document.myform.action = "http://www.example.com/wp-login.php";
        }
    </script>
</head>

<body onload="loginForm()">
<form action="http://www.example.com/wp-login.php" name="myform" method="post">
    <input type="text" name="log" value="admin">
    <input type="password" name="pwd" value="password">
    <input type="submit" value="Login">
</form>

</body>

</html>

Crunchify登录页面
函数loginForm(){
document.myform.submit();
document.myform.action=”http://www.example.com/wp-login.php";
}

这将自动向Wordpress提交登录请求,没有任何问题,并将用户登录到“已提交正确的详细信息”,简单有效,使用VueJS等框架也易于扩展。

我无法使用cURL登录,但我可以使用下面的代码以更简单的方式进行操作

<html>

<head>

    <title>Crunchify Login Page</title>
    <script>
        function loginForm() {
            document.myform.submit();
            document.myform.action = "http://www.example.com/wp-login.php";
        }
    </script>
</head>

<body onload="loginForm()">
<form action="http://www.example.com/wp-login.php" name="myform" method="post">
    <input type="text" name="log" value="admin">
    <input type="password" name="pwd" value="password">
    <input type="submit" value="Login">
</form>

</body>

</html>

Crunchify登录页面
函数loginForm(){
document.myform.submit();
document.myform.action=”http://www.example.com/wp-login.php";
}

这会自动向Wordpress提交登录请求,不会出现任何问题,并将用户记录在“已提交正确的详细信息”中,简单有效,并且使用VueJS等框架可以轻松扩展。

看起来Wordpress会返回一个cookie,它希望在标题中发布,否则您会收到此错误。为了避免这种情况,我骗它以为我提前拿到了饼干:

$headers = array(
   "Cookie: wordpress_test_cookie=WP+Cookie+check"
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
您还需要确保打开了cookie选项

curl_setopt($curl, CURLOPT_COOKIESESSION, 1);
curl_setopt($curl, CURLOPT_COOKIEJAR, '/path/to/cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, '/path/to/cookie.txt');

看起来wordpress返回了一个cookie,它希望在标题中发布该cookie,否则会出现此错误。为了避免这种情况,我骗它以为我提前拿到了饼干:

$headers = array(
   "Cookie: wordpress_test_cookie=WP+Cookie+check"
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
您还需要确保打开了cookie选项

curl_setopt($curl, CURLOPT_COOKIESESSION, 1);
curl_setopt($curl, CURLOPT_COOKIEJAR, '/path/to/cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, '/path/to/cookie.txt');

为什么不使用WordPress ReST API而不是CURL?@libregeek,因为它不支持登录,或者我弄错了?我不确定您的用例是什么,但是如果您试图从WordPress站点获取内容,那么ReST API更好。@libregeek我不想获取内容,我试图通过站点登录WordPress。使用预先填充的凭据登录->重定向到管理页面,以便用户可以使用。基本上,我们有一大堆wordpress网站,将它们全部列出,然后点击一次登录到管理面板会更容易。Rest API将是实现这一点的正确方法,如果这还不够的话,我建议用自己的API方法制作一个插件。还有InfiniteWP(可能还有很多其他选择),我过去免费使用它来管理多个wordpress站点。为什么不使用wordpress ReST API而不是CURL?@libregeek,因为它不支持登录,还是我弄错了?我不确定您的用例是什么,但是如果您试图从wordpress站点获取内容,那么RESTAPI就更好了。@libregeek我不想获取内容,我想通过网站登录wordpress。使用预先填充的凭据登录->重定向到管理页面,以便用户可以使用。基本上,我们有一大堆wordpress网站,将它们全部列出,然后点击一次登录到管理面板会更容易。Rest API将是实现这一点的正确方法,如果这还不够的话,我建议用自己的API方法制作一个插件。此外,还有InfiniteWP(可能还有许多其他选择),我过去免费使用它来管理多个wordpress站点