2013-10-24 71 views
7

我需要在我的WordPress博客管理區域內獲取頁面。以下腳本:如何使用谷歌應用程序腳本獲取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。 關於如何做到這一點的任何想法?

+0

你可以檢查'response.getHeaders()'的值嗎?看看你找回了什麼標題。如果你獲得了狀態200,那麼你的憑證最有可能是不正確的(WordPress成功登錄後發佈狀態302以重定向到儀表板或「redirect_to」參數)。 –

+0

這是我使用正確密碼時收到的標題:{Content-Length = 1186,Expires = Wed,1984年1月11日05:00:00 GMT,Set-Cookie = wordpresspass_CENSOREDSTRING = +; expires = Mon,29-Oct-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,2013年10月29日09:18:51 GMT,Vary = Accept-Encoding,Content-Encoding = gzip,Keep-Alive = timeout = 2,max = 97,Content-Type = text/html; charset = UTF-8} – tic

+0

這是我使用錯誤密碼時收到的內容:{Content-Length = 1546,Expires = Wed,1984年1月11日05:00:00 GMT,Set-Cookie = wordpress_test_cookie = WP +餅乾+檢查; 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,2013年10月29日09:20:37 GMT,Vary = Accept-Encoding,Content-Encoding = gzip,Keep-Alive = timeout = 2,max = 99,Content-Type = text/html; charset = UTF-8} – tic

回答

10

Google Apps腳本可能存在問題,並且發佈到可讓您重新定向標題的網址。

現在看來似乎可能無法跟隨重定向與後 - 這裏是對這個問題的討論 - https://code.google.com/p/google-apps-script-issues/issues/detail?id=1254#c3

難道是可能的,如果您修改代碼,不遵循重定向,捕捉餅乾然後對你的頁面做第二次請求?我還沒有實際使用的氣體,但這裏是我最好的猜測從閱讀文檔:

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(Found)的迴應碼。如果是這種情況,我們會處理這些標題,並專門查找「Set-Cookie」標題。如果已設置,我們將擺脫不需要的內容並存儲Cookie值。

最後,我們向管理員(本例中爲/wp/wp-admin/edit-comments.php)上的所需頁面發出一個新的獲取請求,但這次我們附上了包含上一步中獲取的所有Cookie的「Cookie」標頭。

如果一切正常,你應該把你的管理頁面:)

我上存儲的cookie信息(如果你要進行多個請求到您的網頁),以節省時間提醒,資源和請求。

再次 - 我沒有真正測試代碼,但理論上它應該工作。請對其進行測試,並隨您所做的任何調查結果回饋給我。

+1

它的工作原理,謝謝。 – tic

+0

¡Olé!͏͏͏͏͏͏͏͏͏͏ – brasofilo

相關問題