You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Invoke-WebRequest登录无表单WordPress密码页失败求助

解决方案

针对WordPress仅密码保护页面的登录问题,可通过以下修改解决:

修正后的代码

$baseUrl = "https://www.mypage.com"
$protectedPage = "$baseUrl/internal"
$loginEndpoint = "$baseUrl/wp-login.php?action=postpass"

# 初始化会话,获取页面初始Cookie
$initialRequest = Invoke-WebRequest -Uri $protectedPage -SessionVariable MySession -Method Get

# 构造与浏览器完全匹配的请求体
$body = @{
    post_password = "你的密码"
    Submit        = "Enter"
}

# 发送POST登录请求,明确指定表单编码类型
$loginRequest = Invoke-WebRequest -Uri $loginEndpoint -WebSession $MySession -Body $body -Method Post `
    -ContentType "application/x-www-form-urlencoded" -MaximumRedirection 0

# 访问受保护页面,禁用系统凭据强制使用会话Cookie
$pageContents = Invoke-WebRequest -Uri $protectedPage -WebSession $MySession -Method Get

关键修改说明

  • 移除-UseDefaultCredentials参数:该参数会强制使用当前Windows用户凭据,覆盖会话中保存的登录Cookie,直接导致会话失效。
  • 显式指定-ContentType:虽然PowerShell会自动转换哈希表为表单编码,但明确设置application/x-www-form-urlencoded可避免编码不匹配,确保与浏览器请求完全一致。
  • 禁用自动重定向(-MaximumRedirection 0):WordPress的postpass验证返回302重定向时,自动跟随可能导致会话Cookie未正确留存,禁用后可直接通过会话Cookie访问目标页面。
  • 统一会话变量:所有请求必须复用同一个$MySession,保证登录后的Cookie在请求间正确传递。

额外排查点

  • 检查浏览器中提交的Submit参数名是否为小写submit(部分WordPress主题可能使用小写命名),若不一致需同步修改Body中的键名。
  • 查看$loginRequest.Headers["Set-Cookie"],确认是否包含wp-postpass_开头的Cookie,存在则说明登录验证已生效。

内容的提问来源于stack exchange,提问作者Tanaka Saito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:42:24