使用PowerShell调用Invoke-WebRequest访问西班牙签证网站遇403错误求助
解决PowerShell Invoke-WebRequest登录网站403错误的方法
403错误基本是网站反爬机制拦截了PowerShell的默认请求,试试下面这些实用方案:
模拟浏览器请求头:多数网站会校验
User-Agent字段,Invoke-WebRequest默认标识很容易被识别,换成Chrome的User-Agent即可,示例:$headers = @{ "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" "Accept" = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" "Accept-Language" = "en-US,en;q=0.5" }先获取会话Cookie:直接POST登录请求会因缺少初始会话Cookie被拒绝,先GET登录页面拿到Cookie再发起登录:
# 创建会话对象,保存登录前的Cookie $session = New-Object Microsoft.PowerShell.Commands.WebRequestSession Invoke-WebRequest -Uri "https://uk.blsspainvisa.com/visa4spain/login" -WebSession $session -Headers $headers # 准备登录参数(字段要和网页表单一致,可通过Chrome开发者工具查看) $loginParams = @{ "username" = "你的用户名" "password" = "你的密码" "__RequestVerificationToken" = $session.Cookies.GetCookies("https://uk.blsspainvisa.com")["__RequestVerificationToken"].Value # 按需添加其他必填字段,比如rememberMe等 } # 发送登录请求 $response = Invoke-WebRequest -Uri "https://uk.blsspainvisa.com/visa4spain/login" -Method Post -WebSession $session -Headers $headers -Body $loginParams核对表单字段完整性:打开Chrome开发者工具(F12)→ 网络标签,手动完成一次登录,找到POST请求的「表单数据」,确保PowerShell里的
$loginParams包含所有必填项,尤其是CSRF令牌(通常名为__RequestVerificationToken)。
如果以上方法都失效,说明网站有更严格的反爬逻辑(比如需要JavaScript渲染),这时Invoke-WebRequest无法处理,可以尝试用Selenium PowerShell模块模拟真实浏览器操作。
内容的提问来源于stack exchange,提问作者why_boy
相关产品推荐
相关产品推荐

