2016-01-01 72 views
5

我正在對Gmail中的Rapportive API進行一些逆向工程。訪問HTML文件中的Javascript變量

我提出這個要求

import requests 
url ='https://api.linkedin.com/uas/js/xdrpc.html' 
r = requests.get(url) 
print r.text 

的響應是,有很多的Javascript在一個空的HTML文件。上線3661,它設置爲RequestHeader向Rapportive的後續調用:

ak.setRequestHeader("oauth_token", ae); 

有沒有一種方法,我可以請求頁面,然後返回ae

+0

該文件中唯一的東西是JS,或者JS內部混合了JS? –

+0

只有JS。您可以真正運行該代碼並查看響應。 Rapportive API非常靈活。 –

+0

你需要執行所有的Javascript,因爲這是'ae'。 – Barmar

回答

0

如果您在檢索令牌你不能只是做一個正則表達式匹配只是感興趣:

var str = '<script>var a = 1;...ak.setRequestHeader("oauth_token", ae);...</script>'; 
var token = str.match(/setRequestHeader\("oauth_token",\s*([^)]+)/)[1]; 

雖然這個假設AE是實際的字符串值。如果它是一個變量,這種方法不會輕鬆工作。

編輯:如果它是一個變量,你可以這樣做:

str.replace(/\w+\.setRequestHeader\([^,]+,\s*([^)]+)\s*\);/, 'oauthToken = \1'; 

運行從頁面返回的JavaScript之前,那麼全球oauthToken(注意缺少「VAR」)將包含的價值令牌,假設對代碼的評估與調用者在相同的範圍內運行。

+0

嗯,我很希望能夠請求頁面,以某種方式解析它並訪問令牌。 –

+0

它不會工作。'ae'是對象,而不是原始的標記 – Valijon

+0

@Valijon看到我的編輯,它很髒,但它可能會訣竅。 –

0

我想你可以嘗試:

  1. 獲取的頁面,你已經這樣做了;
  2. 從響應頁面中刪除所有非JavaScript元素;
  3. 在頁面的javascript中預先放置一個javascript(如下所述)以覆蓋某些代碼;
  4. eval('<code>')執行;
  5. 檢查令牌是否設置正確;

我提出以下代碼來覆蓋XMLHttpRequestsetRequestHeader功能能夠得到令牌:

// this will keep the token 
var headerToken; 

// create a backup method 
XMLHttpRequest.prototype.setRequestHeaderBkp = 
XMLHttpRequest.prototype.setRequestHeader; 

// override the "setRequestHeader" method 
XMLHttpRequest.prototype.setRequestHeader = function(key, val) 
{ 
    if ('oauth_token' === key) 
    headerToken = val; 

    this.setRequestHeaderBkp(key, val); 
} 
+0

我會試試這個! –

+0

@MorganAllen關於這個問題的任何消息? –