Как получить страницу администратора 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 (в случае, если вы собираетесь сделать несколько запросов на свою страницу), чтобы сэкономить время, ресурсы и запросы.

Опять же - я на самом деле не тестировал код, но теоретически он должен работать. Пожалуйста, проверьте это и вернитесь ко мне с любыми результатами, которые вы сделаете.

Другие вопросы по тегам