簡體   English   中英

您可以使用 curl 向 wordpress 發送登錄帖子請求嗎?

[英]Can you use curl to send a login post request to wordpress?

我目前正在嘗試設置一些東西,讓我可以遠程登錄 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');

希望能幫助到你。

我無法使用 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 等框架也可以輕松擴展。

看起來 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');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM