你能用curl向wordpress发送登录发帖请求吗?

时间:2017-04-10 14:07:15

标签: php wordpress curl

我目前正试图设置一些允许我远程登录到wordpress的东西,我不确定我是否正确或者是否可能,但它似乎来自我读过的一些事情。< / p>

我正在使用以下代码:

// 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。

我不知道这是什么或为什么这样做

3 个答案:

答案 0 :(得分:0)

我认为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');

希望它有所帮助。

答案 1 :(得分:0)

我无法使用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>

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

答案 2 :(得分:0)

就像wordpress一样,它返回一个cookie,该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');