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

如何为本地Excel添加Cookie以访问WordPress受保护的远程Excel文件

解决本地Excel连接WordPress受保护Excel文件的Cookie授权问题

问题背景

你的WordPress站点uploads文件夹下的excel-r.xlsx通过.htaccess限制仅允许携带wordpress_logged_in系列Cookie的登录用户访问,配置规则如下:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_COOKIE} !.*wordpress_logged_in.*$ [NC]
    RewriteCond %{REQUEST_URI} ^(.*?/?)wp-content/uploads/.* [NC]
    RewriteRule . http://%{HTTP_HOST}%1/wp-login.php?redirect_to=%{REQUEST_URI} [L,QSA]
</IfModule>

同时你在functions.php中添加了login_cookie用于绕过防火墙机器人检测,但本地excel-d.xlsx的VBA代码尝试连接excel-r时,始终无法通过权限验证,现有VB代码不适用当前场景。

核心解决思路

要通过权限验证,VBA请求必须携带WordPress登录状态的wordpress_logged_in_xxxx Cookie(该Cookie名称带动态哈希后缀,需从已登录的浏览器中获取),可选携带login_cookie(如果防火墙强制验证)。

具体操作步骤

1. 获取有效Cookie值

  • 打开浏览器登录你的WordPress后台
  • 按F12打开开发者工具,切换到Application标签页
  • 在左侧Cookies下找到你的站点域名,复制wordpress_logged_in_xxxx的Name和Value,同时复制login_cookie的Name和Value(如果需要)

2. VBA中正确携带Cookie的代码示例

放弃你找到的ASP.NET风格Cookie代码,改用VBA的MSXML2.XMLHTTP对象发送带Cookie的请求,或者在打开远程文件时注入Cookie头。以下是两种常用场景的代码:

场景1:通过HTTP请求获取远程Excel并写入数据

Sub WriteToProtectedExcel()
    Dim xmlHttp As Object
    Dim tempPath As String
    Dim wbRemote As Workbook
    
    ' 初始化XMLHTTP对象
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
    
    ' 替换为你的excel-r的完整URL
    Dim targetUrl As String
    targetUrl = "https://your-domain.com/wp-content/uploads/excel-r.xlsx"
    
    ' 替换为你从浏览器复制的Cookie字符串,格式:"CookieName1=Value1; CookieName2=Value2"
    Dim cookieStr As String
    cookieStr = "wordpress_logged_in_xxxx=your-cookie-value; login_cookie=10DIGITCOOKIECODEHERE"
    
    ' 发送GET请求,携带Cookie
    xmlHttp.Open "GET", targetUrl, False
    xmlHttp.setRequestHeader "Cookie", cookieStr
    xmlHttp.send
    
    ' 将返回的Excel文件保存到本地临时路径
    tempPath = Environ("TEMP") & "\temp_excel_r.xlsx"
    Open tempPath For Binary As #1
    Put #1, , xmlHttp.responseBody
    Close #1
    
    ' 打开临时文件并写入数据
    Set wbRemote = Workbooks.Open(tempPath)
    ' 示例:写入A1单元格
    wbRemote.Sheets(1).Range("A1").Value = "测试数据"
    
    ' 保存并关闭临时文件,再上传回服务器(如果需要)
    wbRemote.Save
    wbRemote.Close False
    
    ' 可选:上传修改后的文件回服务器(需要额外处理PUT请求)
    ' 这里省略上传代码,如需可补充PUT请求逻辑
    
    Kill tempPath
    Set xmlHttp = Nothing
    Set wbRemote = Nothing
End Sub

场景2:直接打开远程Excel(需服务器支持WebDAV)

如果你的服务器支持WebDAV,可直接通过Workbooks.Open并设置HTTP头:

Sub OpenProtectedExcelDirectly()
    Dim wbRemote As Workbook
    Dim targetUrl As String
    targetUrl = "https://your-domain.com/wp-content/uploads/excel-r.xlsx"
    
    ' 替换为你的Cookie字符串
    Dim cookieStr As String
    cookieStr = "wordpress_logged_in_xxxx=your-cookie-value; login_cookie=10DIGITCOOKIECODEHERE"
    
    ' 创建HTTP头对象
    Dim headers As Object
    Set headers = CreateObject("WinHttp.WinHttpRequest.5.1")
    headers.Open "GET", targetUrl, False
    headers.setRequestHeader "Cookie", cookieStr
    headers.send
    
    ' 提取会话信息,用于打开文件
    Set wbRemote = Workbooks.Open(targetUrl, , , , , , , , , , headers.getAllResponseHeaders)
    
    ' 写入数据示例
    wbRemote.Sheets(1).Range("A1").Value = "直接写入的测试数据"
    wbRemote.Save
    wbRemote.Close False
    
    Set headers = Nothing
    Set wbRemote = Nothing
End Sub

注意事项

  • wordpress_logged_in Cookie有有效期,过期后需要重新从浏览器获取
  • 确保VBA代码中的域名、Cookie值和文件路径完全匹配
  • 如果服务器有额外的WAF验证,可能需要同时携带login_cookie
  • 若使用WebDAV方式,需确认服务器已启用WebDAV模块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:15:34