Google Apps 脚本和发布到返回重定向标头的 URL 可能存在问题。
似乎不可能通过帖子跟踪重定向 - 这是关于这个问题的讨论 -
https://issuetracker.google.com/issues/36754794
如果您修改代码以不遵循重定向、捕获 cookie 然后对您的页面进行第二次请求,是否有可能?我实际上并没有使用过 GAS,但这是我阅读文档后的最佳猜测:
function fetchAdminPage() {
var url = "http://www.mydomain.invalid/wp/wp-admin/wp-login.php";
var options = {
"method": "post",
"payload": {
"log": "admin",
"pwd": "password",
"wp-submit": "Login",
"testcookie": 1
},
"followRedirects": false
};
var response = UrlFetchApp.fetch(url, options);
if ( response.getResponseCode() == 200 ) {
// Incorrect user/pass combo
} else if ( response.getResponseCode() == 302 ) {
// Logged-in
var headers = response.getAllHeaders();
if ( typeof headers['Set-Cookie'] !== 'undefined' ) {
// Make sure that we are working with an array of cookies
var cookies = typeof headers['Set-Cookie'] == 'string' ? [ headers['Set-Cookie'] ] : headers['Set-Cookie'];
for (var i = 0; i < cookies.length; i++) {
// We only need the cookie's value - it might have path, expiry time, etc here
cookies[i] = cookies[i].split( ';' )[0];
};
url = "http://www.mydomain.invalid/wp/wp-admin/edit-comments.php";
options = {
"method": "get",
// Set the cookies so that we appear logged-in
"headers": {
"Cookie": cookies.join(';')
}
};
response = UrlFetchApp.fetch(url, options);
};
};
...
}
您显然需要添加一些调试和错误处理,但它应该可以让您通过。
这里发生的是我们首先发布到登录表单。假设一切正常,这应该会给我们返回 302(找到)的响应代码。如果是这种情况,我们将处理标头并专门查找“Set-Cookie”标头。如果已设置,我们将删除不需要的内容并存储 cookie 值。
最后,我们向管理员上的所需页面发出新的获取请求(在本例中/wp/wp-admin/edit-comments.php
),但这次我们附加了包含上一步中获取的所有 cookie 的“Cookie”标头。
如果一切正常,你应该得到你的管理页面:)
我建议存储 cookie 信息(以防您要向页面发出多个请求)以节省时间、资源和请求。
再说一遍 - 我还没有实际测试过代码,但理论上它应该可以工作。请对其进行测试,然后将您的任何发现返回给我。