Wie rufe ich eine WordPress-Admin-Seite mit dem Google Apps-Skript ab?

Lesezeit: 3 Minuten

Wie rufe ich eine WordPress Admin Seite mit dem Google Apps Skript ab
Tick

Ich muss eine Seite in meinem WordPress-Blog-Verwaltungsbereich abrufen. Das folgende Skript:

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);
   ...
}

wird fehlerfrei ausgeführt. Ohnehin, response.getContentText() gibt die Anmeldeseite zurück, und ich kann nicht auf die Seite zugreifen http://www.mydomain.invalid/wp/wp-admin/edit-comments.php das ist das, was ich holen möchte. Irgendeine Idee, wie man das macht?

  • Können Sie den Wert von überprüfen response.getHeaders()? Sehen Sie, welche Header Sie zurückbekommen. Wenn Sie einen Status 200 erhalten, sind Ihre Zugangsdaten höchstwahrscheinlich falsch (WordPress gibt einen Status 302 aus, um Sie zum Dashboard oder zum redirect_to Parameter bei erfolgreicher Anmeldung).

    – Nikola Iwanow Nikolow

    28. Oktober 2013 um 17:59 Uhr

  • Dies ist der Header, den ich erhalte, wenn ich das richtige Passwort verwende: {Content-Length=1186, Expires=Wed, 11 Jan 1984 05:00:00 GMT, Set-Cookie=wordpresspass_CENSOREDSTRING=+; läuft ab=Montag, 29. Oktober 2012 09:18:51 GMT; path=/wp/, Connection=Keep-Alive, Server=Apache, X-Powered-By=PHP/5.3.3-7+squeeze14, Cache-Control=no-cache, must-revalidate, max-age=0, Pragma=no-cache, X-Frame-Options=SAMEORIGIN, Date=Tue, 29. Okt. 2013 09:18:51 GMT, Vary=Accept-Encoding, Content-Encoding=gzip, Keep-Alive=timeout=2, max= 97, Inhaltstyp=text/html; Zeichensatz=UTF-8}

    – Tick

    29. Oktober 2013 um 9:22 Uhr

  • Und das ist das, was ich erhalte, wenn ich das falsche Passwort verwende: {Content-Length=1546, Expires=Wed, 11 Jan 1984 05:00:00 GMT, Set-Cookie=wordpress_test_cookie=WP+Cookie+check; path=/wp/, Connection=Keep-Alive, Server=Apache, X-Powered-By=PHP/5.3.3-7+squeeze14, Cache-Control=no-cache, must-revalidate, max-age=0, Pragma=no-cache, X-Frame-Options=SAMEORIGIN, Date=Tue, 29. Okt. 2013 09:20:37 GMT, Vary=Accept-Encoding, Content-Encoding=gzip, Keep-Alive=timeout=2, max= 99, Inhaltstyp=text/html; Zeichensatz=UTF-8}

    – Tick

    29. Oktober 2013 um 9:23 Uhr

Wie rufe ich eine WordPress Admin Seite mit dem Google Apps Skript ab
Nikola Iwanow Nikolow

Möglicherweise liegt ein Problem mit Google Apps-Skripts und dem Posten an eine URL vor, die Ihnen einen Umleitungsheader zurückgibt.

Es scheint, als wäre es nicht möglich, der Weiterleitung mit einem Beitrag zu folgen – hier ist eine Diskussion zu diesem Problem –

https://issuetracker.google.com/issues/36754794

Wäre es möglich, wenn Sie Ihren Code so ändern, dass er Weiterleitungen nicht folgt, die Cookies erfassen und dann eine zweite Anfrage an Ihre Seite stellen? Ich habe GAS nicht wirklich verwendet, aber hier ist meine beste Vermutung aus dem Lesen der Dokumentation:

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);
     };
   };
   ...
}

Sie müssten natürlich etwas Debugging und Fehlerbehandlung hinzufügen, aber es sollte Sie durchbringen.

Was hier passiert, ist, dass wir zuerst auf das Anmeldeformular posten. Unter der Annahme, dass alles richtig läuft, sollte uns das einen Antwortcode von 302 (Gefunden) zurückgeben. Wenn das der Fall ist, verarbeiten wir die Header und suchen gezielt nach dem „Set-Cookie“-Header. Wenn es gesetzt ist, werden wir das nicht benötigte Zeug los und speichern die Cookie-Werte.

Abschließend stellen wir eine neue Get-Anfrage an die gewünschte Seite im Admin (in diesem Fall /wp/wp-admin/edit-comments.php ), aber dieses Mal hängen wir den “Cookie”-Header an, der alle im vorherigen Schritt erworbenen Cookies enthält.

Wenn alles wie erwartet funktioniert, sollten Sie Ihre Admin-Seite erhalten 🙂

Ich würde empfehlen, die Cookie-Informationen zu speichern (falls Sie mehrere Anfragen an Ihre Seite stellen), um Zeit, Ressourcen und Anfragen zu sparen.

Nochmals – ich habe den Code nicht wirklich getestet, aber theoretisch sollte es funktionieren. Bitte testen Sie es und kommen Sie mit allen Erkenntnissen, die Sie machen, zu mir zurück.

964740cookie-checkWie rufe ich eine WordPress-Admin-Seite mit dem Google Apps-Skript ab?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy