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?
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.
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 zumredirect_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