带Basic身份验证的HTTP GET请求无法获取目标内容求助
解决Basic认证未生效、返回登录页的问题
以下是针对性的排查和解决方向:
先确认目标站点是否支持HTTP Basic认证
很多现代网站用的是表单登录(依赖Session/Cookie),而非HTTP原生的Basic认证。手动访问目标URL验证:如果弹出浏览器系统级的灰色登录弹窗,才是Basic认证场景;如果是网站自定义的表单登录,那你的Basic认证代码完全不适用,得换表单登录的方式。检查Base64编码的字符集
Google Apps Script的Utilities.base64Encode默认用UTF-8编码,但部分老旧站点要求ISO-8859-1编码。试试修改编码规则:"Authorization" : "Basic " + Utilities.base64Encode(username + ":" + password, Utilities.Charset.ISO_8859_1)关闭自动重定向,排查返回状态码
UrlFetchApp默认会跟随重定向,未认证的请求可能被跳转到登录页,导致你拿到的是登录页面HTML。关闭重定向后查看状态码,能帮你定位问题:var params = { "method":"GET", "headers": headers, "followRedirects": false // 关闭自动重定向 }; const response = UrlFetchApp.fetch(url, params); Logger.log(response.getResponseCode()); // 返回401说明认证失败;返回3xx则大概率是表单登录场景模拟表单登录(针对非Basic认证的站点)
如果目标站点是表单登录,需要先POST登录请求拿到会话Cookie,再携带Cookie访问目标页面。示例代码如下:function getAuthenticatedContent() { var loginUrl = "替换为站点的登录接口URL"; var targetUrl = "替换为你要访问的目标URL"; var username = "USER"; var password = "PASSWRD"; // 1. 提交登录表单获取会话Cookie var loginParams = { method: "POST", payload: { "username": username, // 需根据站点实际表单字段调整,比如可能是email "password": password }, followRedirects: false, headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } }; var loginResponse = UrlFetchApp.fetch(loginUrl, loginParams); var cookies = loginResponse.getAllHeaders()["Set-Cookie"]; // 2. 携带Cookie访问目标页面 var targetParams = { method: "GET", headers: { "Cookie": cookies.join("; "), "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } }; var targetResponse = UrlFetchApp.fetch(targetUrl, targetParams); Logger.log(targetResponse.getContentText()); }注意:登录接口URL、表单字段名需要通过浏览器开发者工具抓包获取,确保和站点实际请求一致。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

