2016-01-01 5 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で、それはRapportiveへの後続の呼び出しのためのRequestHeaderを設定します:私は、そのページを要求し、その後aeを返すことができる方法は

ak.setRequestHeader("oauth_token", ae); 

ありますか?あなたはあなただけの正規表現マッチを行うことができないトークンを検索する際にだけ興味がある場合

+0

ファイル内の唯一のものはJSですか、またはHTMLボディ内にJSが混在していますか? –

+0

JSのみ。実際にそのコードを実行し、応答を見ることができます。 Rapportive APIは本当に柔軟性があります。 –

+0

すべてのJavascriptを実行する必要があります。これは 'ae'を設定するものです。 – Barmar

答えて

0

:これはAEを前提としていますが

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

は、実際の文字列値です。それが変数ならば、このアプローチは簡単には機能しません。

編集:それはあなたが何か行うことができ、変数の場合:JavaScriptを実行する前に

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

ページから返され、その後、グローバルoauthTokenは(行方不明「VAR」を気づか)の値が含まれますトークンは、コードの評価が呼び出し元と同じスコープで実行されていると仮定します。

+0

まあ、私は望んでいますそれを何とかして解析し、トークンにアクセスすることができるようにする。 –

+0

これは動作しません。'ae'は生のトークンではなくオブジェクトです – Valijon

+0

@Valijon私の編集を参照してください、それは汚いですが、それはトリックを行うかもしれません。 –

0

私はあなたが試すことができると思う:あなたはすでにないよう

  1. は、ページを取得します。
  2. レスポンスページからすべての非javascript要素を削除します。
  3. ページのJavaScriptにJavaScriptを追加して、いくつかのコードを上書きします。
  4. eval('<code>')で実行してください。
  5. トークンが正しく設定されていることを確認してください。

XMLHttpRequestを無効にする次のコードを提案しています。 setRequestHeaderトークンを取得できる機能:

// 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問題に関するニュースはありますか? –