在使用Google Apps Scripts进行POST请求并收到重定向头时可能会出现问题。
似乎不能通过POST请求跟随重定向 - 这是一个讨论该问题的链接 -
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 ) {
} else if ( response.getResponseCode() == 302 ) {
var headers = response.getAllHeaders();
if ( typeof headers['Set-Cookie'] !== 'undefined' ) {
var cookies = typeof headers['Set-Cookie'] == 'string' ? [ headers['Set-Cookie'] ] : headers['Set-Cookie'];
for (var i = 0; i < cookies.length; i++) {
cookies[i] = cookies[i].split( ';' )[0];
};
url = "http://www.mydomain.invalid/wp/wp-admin/edit-comments.php";
options = {
"method": "get",
"headers": {
"Cookie": cookies.join(';')
}
};
response = UrlFetchApp.fetch(url, options);
};
};
...
}
显然,您需要添加一些调试和错误处理,但它应该能够帮助您完成任务。
这里的操作是首先向登录表单提交请求。假设一切都进行得正确,那么我们应该会收到一个302(已找到)的响应代码。如果是这种情况,然后我们将处理头文件,特别是查找“Set-Cookie”头。如果设置了该头,我们将摆脱不需要的内容并存储Cookie值。
最后,我们在管理界面上对所需页面发出新的get请求(在本例中为/wp/wp-admin/edit-comments.php
),但这次我们附加了“Cookie”头,其中包含在前一步中获取的所有Cookie。
如果一切正常,您应该可以得到管理员页面:)
我建议将Cookie信息保存下来(以防您要向您的页面发出多个请求),以节省时间、资源和请求。
再说一遍-我实际上没有测试过这段代码,但理论上它应该可以工作。请测试它,并告诉我您的任何发现。
response.getHeaders()
的值吗?看看你得到了哪些头信息。如果你得到了状态码 200,那么你的凭证很可能是不正确的(WordPress 在成功登录后会发出状态码 302 来将你重定向到仪表盘或redirect_to
参数)。 - Nikola Ivanov Nikolov