Как получить страницу администратора WordPress с помощью скрипта Google Apps
Мне нужно получить страницу внутри моей админки в блоге Wordpress. Следующий скрипт:
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",
"redirect_to":"http://www.mydomain.invalid/wp/wp-admin/edit-comments.php",
"testcookie": 1
}
};
var response = UrlFetchApp.fetch(url, options);
...
}
выполняется без ошибок. Тем не мение, response.getContentText()
возвращает страницу входа в систему, и я не могу получить доступ к странице http://www.mydomain.invalid/wp/wp-admin/edit-comments.php которую я хочу получить. Есть идеи, как это сделать?
1 ответ
Возможно, возникла проблема со скриптами Google Apps и публикацией по URL-адресу, который возвращает заголовок перенаправления.
Похоже, что за редиректом не может быть сообщения - вот обсуждение этой проблемы - https://code.google.com/p/google-apps-script-issues/issues/detail?id=1254
Было бы возможно, если бы вы изменили свой код, чтобы он не следовал за перенаправлениями, захватили куки и затем сделали второй запрос к своей странице? Я на самом деле не использовал ГАЗ, но вот мое лучшее предположение из чтения документации:
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 (в случае, если вы собираетесь сделать несколько запросов на свою страницу), чтобы сэкономить время, ресурсы и запросы.
Опять же - я на самом деле не тестировал код, но теоретически он должен работать. Пожалуйста, проверьте это и вернитесь ко мне с любыми результатами, которые вы сделаете.