[英]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.